簡體   English   中英

Python:在linux上,subprocess.Popen()與shell = True一起工作很奇怪

[英]Python: on linux, subprocess.Popen() works weird with shell = True

如果我在Windows上執行以下python代碼:

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

我按預期將錯誤寫入stdout:

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

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

user@debian:~/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模式。

這在文檔中有詳細說明:

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

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

(強調我的)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM