繁体   English   中英

从特定目录中的python脚本运行bash命令

[英]Running bash commands from python script in certain directory

我正在尝试编写一个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

可能是此问题的原因以及如何解决?

我认为您的问题是,您希望将pcrdat作为参数传递给程序,并且您认为空格会为您做到这一点-但Python并非bash。 只需使用一个数组,它应该可以工作:

subprocess.Popen([fp, pcr, dat], cwd=path+dirs[0], stdout=PIPE)

您得到“没有这样的文件或目录”的原因:Python正在寻找一个名为"$fp "+pcr+" "+dat ,即它假定空格(和美元符号,除非您将其表示为伪代码占位符)是程序名称的一部分。 该错误告诉您没有使用该名称的程序。

但是,由于您的代码段不完整,因此很难猜测您的意思。 我真的不知道$fppcrdat是什么意思。

还可以查看子流程模块文档中的示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM