簡體   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