2017-06-05 2 views
0

これは大きな問題につながりますherePopen()があります。Popen( "cmd.exe echo a"、shell = True)が "echo"を実行していないのはなぜですか?

次、私はそれが必要と思った何をしていません。

x = subprocess.Popen("cmd.exe echo a", stdout=PIPE, shell=True) 
print (x.stdout.read()) 

は、CMDコンソールの「タイトル」のメッセージを返しますが、echo aが実行されることはありません。同じ

x = subprocess.Popen(["cmd.exe", "echo a"], stdout=PIPE) 
print (x.stdout.read()) 

cmd = "cmd.exe echo a" 
x = subprocess.Popen(shlex.split(cmd), stdout=PIPE) 
print (x.stdout.read()) 

最終的な結果は、 "... Microsoft Windowsバージョン" 標準を印刷し、オープンCMD端子であるとC:\Python36>のCLI位置。

答えて

3

cmd.exeは、実行のために渡されるスクリプトの前に、引数/cが必要です:あなたはshell=Trueを指定するとき

x = subprocess.Popen(["cmd.exe", "/c", "echo a"], stdout=PIPE) 
print (x.stdout.read()) 
+0

'C:\ Users \ Me> C:\ path \を\ app.exe arg1 arg2'の' stdout'としたいのですが? cmdコンソールを開いて.exeパスとargsを指定した場合、出力は 'stdout'に出力されますが、OP内のリンクに' subprocess'をアウトラインとして複製しているようです。 – madeslurpy

2

コマンドプロセッサcmd.exeは暗黙的です。プロンプトでcmd.exeを入力したかのようにあなたは、ネストされたコマンドコンソールを起動し、明示的に呼び出すことによって

>>> x = subprocess.Popen("echo a", stdout=subprocess.PIPE, shell=True) 
>>> print (x.stdout.read()) 
a 

。その出力はPopen()のパイプには流れません。

関連する問題