gpt4 book ai didi

bash - 使用 os.system 正确处理从 Python 转义的 shell

转载 作者:行者123 更新时间:2023-11-29 09:04:45 25 4
gpt4 key购买 nike

我在使用 os.system 命令从 Python 中正确转义对 shell 的调用时遇到了问题。我正在尝试做相当于:

$ cat test | sort --stable -t $'\t' -k1,1

从 Python 内部,将其传递给 shell。

我试过:

import os
cmd = "cat %s | sort --stable -t $'\\t' -k1,1" %("test")
os.system(cmd)

但是我得到了错误:

sort: multi-character tab `$\\t'

尽管它可以在 shell 中正常工作。我试图通过在 Python 中添加一个额外的斜杠来转义 \t,但我一定遗漏了其他东西。知道如何解决这个问题吗?

谢谢。

最佳答案

os.system 不会像您期望的那样在普通的 bash 环境中执行命令。您可以通过简单地自己调用 bash 来解决它:

import os
cmd = """/bin/bash -c "cat %s | sort --stable -t $'\t' -k1,1" """ % "test"
os.system(cmd)

但是你应该知道 os.system 已经被标记为弃用,并将在未来的 python 版本中被删除。您可以使用 subprocess 的便捷方法 call 模仿 os.system 的行为,让您的代码永不过时:

import subprocess
cmd = """/bin/bash -c "cat %s | sort --stable -t $'\t' -k1,1" """ % "test"
subprocess.call(cmd, shell=True)

如果您有兴趣,还有更多方法可以使用 subprocess 模块进行调用:

http://docs.python.org/library/subprocess.html#module-subprocess

关于bash - 使用 os.system 正确处理从 Python 转义的 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8380098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com