[英]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
可能是此問題的原因以及如何解決?
我認為您的問題是,您希望將pcr
和dat
作為參數傳遞給程序,並且您認為空格會為您做到這一點-但Python並非bash。 只需使用一個數組,它應該可以工作:
subprocess.Popen([fp, pcr, dat], cwd=path+dirs[0], stdout=PIPE)
您得到“沒有這樣的文件或目錄”的原因:Python正在尋找一個名為"$fp "+pcr+" "+dat
,即它假定空格(和美元符號,除非您將其表示為偽代碼占位符)是程序名稱的一部分。 該錯誤告訴您沒有使用該名稱的程序。
但是,由於您的代碼段不完整,因此很難猜測您的意思。 我真的不知道$fp
和pcr
和dat
是什么意思。
還可以查看子流程模塊文檔中的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.