python子进程 - 如何将dir更改为运行命令?

时间:2017-05-05 18:29:37

标签: python-3.x subprocess

我有一个python脚本,我使用subprocess.getoutput()运行cmd,并将结果输出存储在列表中。现在,我需要能够将脚本更改为目标目录并在那里运行命令。它应该很简单,但是将cwd arg传递给getoutput()是行不通的。

有什么想法吗?

示例:

out = subprocess.getoutput(" ".join(cmd), cwd='/my/target/path').splitlines()

从doc开始,看起来我可以使用subprocess.Popen轻松完成此操作,但是很难将输出输入到字符串列表中。我只能将结果放入二进制字符串列表中。

1 个答案:

答案 0 :(得分:1)

subprocess.getoutputLegacy Shell Invocation Function。它没有采用cwd参数并返回(status, output)的元组。在进入bytes列表之前,您已经遇到了一些问题。

当python运行一个程序时,它不知道它输出的编码是什么,你需要以某种方式提供它。假设编码是'utf-8',基本操作是

mylist = []
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, cwd='/my/target/path')
for line in mylist:
    mylist.append(line.decode('utf-8'))
proc.wait()

在此实施中,写入stderr的任何内容都会转到您的程序stderr。另请注意,我将命令保留为列表并且没有shell=True。有几个辅助函数可以为您完成一些工作,但这已经很简单了。