python执行多个命令子进程

时间:2017-08-18 09:44:19

标签: python subprocess

我有一个像

这样的命令
    def subprocess_cmd(command):
        fnlogs("comand = " + command)
        process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True)
        proc_stdout = process.communicate()[0].strip()
        fnlogs("proc_stdout = " +proc_stdout + "\n")

subprocess_cmd('su - user; cd $CONFIG; grep domain domains.xml')

需要一个接一个地执行命令并捕获grep的输出。

CTE

输出说grep:domains.xml:没有这样的文件或目录,虽然该文件存在但无法找到它。

1 个答案:

答案 0 :(得分:0)

您似乎没有传递CONFIG的值。

如果您知道脚本中的预期值,则可以执行

d = dict(os.environ)
d["CONFIG"] = "/some/directory"
process = subprocess.Popen(command,stdout=subprocess.PIPE, shell=True, env=d)

您可能还必须使用sudo致电-E以保留您传递到第一个最外层shell的环境(请参阅https://stackoverflow.com/a/8633575/693140)。

更一般地说,如果不依赖外部命令,您的子命令似乎不会执行在Python中无法实现的任何操作。我建议完全重新考虑你的方法,只需打开文件并从字符串中提取相应的文本(例如使用正则表达式)。