shell命令在我的終端,如果我跑:echo $(pwd)
,我/home/abr/workspace
,但是當我試圖運行此腳本在Python這樣的:無法運行與子
>>> import subprocess
>>> cmd = ['echo', '$(pwd)']
>>> subprocess.check_output(cmd, shell=True)
我得到'\n'
。如何解決這個問題?
shell命令在我的終端,如果我跑:echo $(pwd)
,我/home/abr/workspace
,但是當我試圖運行此腳本在Python這樣的:無法運行與子
>>> import subprocess
>>> cmd = ['echo', '$(pwd)']
>>> subprocess.check_output(cmd, shell=True)
我得到'\n'
。如何解決這個問題?
使用os
包:
import os
print os.environ.get('PWD', '')
試試這個:
cmd = 'echo $(pwd)'
subprocess.check_output(cmd, shell=True)
在subprocess
文檔它指定cmd
應該是一個字符串shell=True
時。
從文檔:
殼參數(默認爲假)指定是否使用 殼作爲要執行的程序。如果shell爲True,建議將作爲字符串傳遞,而不是作爲序列傳遞。
一種更好的方式實現這一目標是可能使用os
模塊從Python標準庫,就像這樣:
import os
print os.getcwd()
>> "/home/abr/workspace"
的getcwd()
函數返回代表當前工作目錄的字符串。
這是正確的。如果你認爲它增加了任何東西,我會考慮添加python已經建立了更好的替代方案,或者引用子進程上的文檔:「但是,請注意Python本身提供了許多類似shell的功能的實現」 –
@msn請考慮點擊複選標記有助於接受答案。 – Forge
從subprocess
模塊上的文檔:
如果
args
是一個序列中,第一項指定的命令串,並 任何其他項將被視爲附加的參數 外殼本身。
你想:
subprocess.check_output("echo $(pwd)", shell=True)
命令subpreocess.check_output
將返回命令的輸出,你在呼喚: 例子:
#echo 2
2
蟒蛇
>>>subprocess.check_output(['echo', '2'], shell=True)
>>>'2\n'
的
'\ n'包含在內這是命令的作用,它打印輸出sting,然後將電流放在一個新的行。
現在回到你的問題;假設你想輸出'PWD',首先你必須擺脫shell。如果您提供shell參數,則該命令將在shell環境中運行,並且您將看不到返回的字符串。
subprocess.check_output(['pwd'])
將返回當前目錄+「\ n」
就我個人而言,我也很難理解你正在嘗試做的,但我希望這有助於解決這個問題。
爲什麼你會這樣做而不是使用os包?似乎使用內置函數更容易,而不是依賴幾乎肯定是os/privilege/system/configuration/terminal依賴的外部調用。 os.path.abspath(os.path.curdir)似乎很簡單 –
如果您將鼠標懸停在問題文本下的[tag:subprocess]上;你應該看到標籤的描述。點擊說明下的「info」鏈接。 [我收集了一些又一次被問及的問題。如果你研究這些問題;您可能會避免將來使用'subprocess'模塊時的常見問題](http://stackoverflow.com/tags/subprocess/info)。 – jfs