我正在尝试编写一个Python脚本,以便在多个目录中以递归方式运行bash程序,并在日志文件中保存(现在只显示)输出。
问题是,当我尝试从主目录运行该应用程序只是给出输入文件的完整路径时它会崩溃,所以我通常直接在包含输入文件的目录中运行它。我试图用os.popen()和pexpect来做这个,但我认为这里最合适的是subprocess。
我的代码:
import subprocess,
from subprocess import Popen, PIPE
subprocess.Popen("$fp "+pcr+" "+dat, cwd=path+dirs[0], stdout=PIPE)
print output.stdout.read()
其中pcr和dat是输入文件的名称。
当我尝试运行它时,我得到以下错误:
Traceback (most recent call last):
File "file_ed.py", line 47, in <module>
subprocess.Popen("$fp "+pcr+" "+dat, cwd=retval, stdout=PIPE)
File "/usr/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
这个问题可能是什么原因以及如何解决?
答案 0 :(得分:2)
我觉得你的问题是,你想传递pcr
和dat
作为参数传递给程序,而您认为空白会替你 - 但Python是不是bash的。只需使用一个数组,它应该工作:
subprocess.Popen([fp, pcr, dat], cwd=path+dirs[0], stdout=PIPE)
你得到“没有这样的文件或目录”的原因:Python正在寻找一个名为"$fp "+pcr+" "+dat
的程序,即它假设空白(和美元符号,除非你的意思是伪造的 - 代码占位符)是程序名称的一部分。该错误告诉您没有具有此名称的程序。
然而很难猜出你的意思,因为你的代码片段不完整。我真的不知道$fp
和pcr
和dat
是什么意思。
另请参阅子进程模块文档中的示例。