【发布时间】:2015-10-31 17:46:48
【问题描述】:
我正在尝试编写一个 Python 脚本以在多个目录中从 bash 递归运行程序,并将输出保存(现在只是显示)日志文件中。
问题是,当我尝试从主目录运行该应用程序时,只需提供输入文件的完整路径,它就会崩溃,所以我通常直接在包含输入文件的目录中运行它。我曾尝试使用 os.popen() 和 pexpect 来做到这一点,但我认为这里最合适的是子进程。
我的代码:
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
此问题的原因可能是什么以及如何解决?
【问题讨论】:
-
您正在尝试访问文件或运行不存在的命令。例如,可能没有命令
$fp。有关在子进程中使用环境变量的信息,请参阅 this question。 -
运行一系列 bash 命令的最佳方法是编写一个 bash 脚本来执行它。你的方法很难做到。
标签: python bash subprocess