2013-05-30 51 views
2

如果我執行在Windows下面的Python代碼:的Python:在Linux上,subprocess.Popen()的作品怪異與殼=真

import subprocess 
subprocess.Popen([ 'python', 'foo' ], shell = True).communicate() 

我被寫入標準輸出錯誤,符合市場預期:

python: can't open file 'foo': [Errno 2] No such file or directory 

但是,如果我在linux上執行相同的代碼(ubuntu,OSX-任何),我得到了交互式的python REPL而不是這個文本!像這樣:

[email protected]:~/Documents$ python test.py 
Python 2.7.3 (default, Jab 2 2013, 16:53:07) 
[GCC 4.7.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information 
>>> 

爲什麼這種奇怪的行爲?使用參數('foo')執行python解釋器必須將其置於所有平臺上的評估模式,而不是置入REPL模式。

回答

7

這是在文檔中闡明:

殼參數(默認爲假)指定是否使用殼作爲要執行的程序。 如果shell爲True,建議將args作爲字符串傳遞,而不是作爲序列傳遞。

在Unix上,shell = True,shell默認爲/ bin/sh。如果args是一個字符串,則該字符串指定通過shell執行的命令。這意味着該字符串的格式必須與在shell提示符下鍵入時的格式完全相同。這包括,例如,在其中包含空格的引號或反斜線轉義文件名。 如果args是一個序列,則第一項指定命令字符串任何其他項目將被視爲殼本身的附加參數。

(重點煤礦)

+0

+1審慎強調 – inspectorG4dget

相關問題