我有一个python脚本,我使用subprocess.getoutput()运行cmd,并将结果输出存储在列表中。现在,我需要能够将脚本更改为目标目录并在那里运行命令。它应该很简单,但是将cwd arg传递给getoutput()是行不通的。
有什么想法吗?
示例:
out = subprocess.getoutput(" ".join(cmd), cwd='/my/target/path').splitlines()
从doc开始,看起来我可以使用subprocess.Popen轻松完成此操作,但是很难将输出输入到字符串列表中。我只能将结果放入二进制字符串列表中。
答案 0 :(得分:1)
subprocess.getoutput
是Legacy 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
。有几个辅助函数可以为您完成一些工作,但这已经很简单了。