2017-03-12 13 views
0

subprocess.Popenを使用して複数のコマンドを実行しようとしていますが、エラーが発生しています。Python 3のサブプロセスを使用して複数のコマンドを実行する

subprocess.Popen(['C:/cygwin64/Cygwin.bat' && './iv4_console.exe ../embedded/LUA/analysis/verbose-udp-example.lua'], bufsize=0, executable=None, 
         stdin=None, stdout=None, stderr=None, 
         preexec_fn=None, close_fds=False, 
         shell=True, cwd="F:/Master_Copy2/iv_system4/ports/visualC12/Debug", env=None, universal_newlines=False, 
         startupinfo=None, creationflags=0) 

エラーは言う:&ため サポートされていないオペランドのタイプ(S): 'STR' と 'str' は が、私は問題を把握することはできません。

+0

あなたがこれを読ん&& –

+0

をuseing ARなぜ、**文字列特殊演算子**:https://www.tutorialspoint.com/python/python_strings.htm – stovfl

+0

@AnkurJyotiPhukan私は1つのずつ順番のコマンドを実行しようとしています。 –

答えて

0

&は、2項演算子です。文字列+を連結しようとしている場合は+を使用してください。

さらに、呼び出されたコマンドのパラメータは、同じ文字列ではなく、リストの要素として渡される必要があります。

0

あなたは、文字列内の& &を使用する必要があります。

subprocess.Popen(['C:/cygwin64/Cygwin.bat && ./iv4_console.exe ../embedded/LUA/analysis/verbose-udp-example.lua'], bufsize=0, executable=None, 
        stdin=None, stdout=None, stderr=None, 
        preexec_fn=None, close_fds=False, 
        shell=True, cwd="F:/Master_Copy2/iv_system4/ports/visualC12/Debug", env=None, universal_newlines=False, 
        startupinfo=None, creationflags=0) 

& &を使用すると、2番目のコマンドは、最初に成功した場合にのみ実行したいと仮定します。要件に応じて、他の演算子(&、;など)が適用されます。

+0

コメントありがとうございます。しかし、これはエラーを発生させませんでしたが、どちらも動作しませんでした! 以下を実行しようとしています。 1. Cygwin端末を実行します。 2. dirを "F:/ Master_Copy2/iv_system4/ports/visualC12/Debug"に変更します。 3. "./iv4_console.exe ../embedded/LUA/analysis/verbose-udp-example.lua"を実行します。 –

+0

あなたの質問は、サブプロセスを使って複数のコマンドを実行する方法でした。これがその方法です。私はコマンドがあなたのために働いていない理由を知らない。あなたが提供した2つのコマンドを2つの基本コマンドに置き換えた場合、そのコマンドが機能することがわかります。これ(http://stackoverflow.com/questions/31221279/python-subprocess-call-using-cygwin-instead-of-cmd-on-windows)が役立つかもしれませんが、手元の質問とは無関係です。 cygwinの問題について別の質問をする必要があります。 – nir0s

+0

試してみます。ありがとうございました。 –

1

私はサブプロセスモジュールには専門家でないが、私はあなたの問題はあなたがWindowsのコマンドラインに&、ビット単位のAND演算子として解釈コマンドの連結opertator平野のpythonで&&を、使用していることであると信じています。その後、Windowsのコマンドライン、そして正しくチェーンのコマンドに渡される文字列'&&'、と

subprocess.Popen(['C:/cygwin64/Cygwin.bat' + ' && ' + './iv4_console.exe 
       ../embedded/LUA/analysis/verbose-udp-example.lua']... 

これは置き換え&&

subprocess.Popen(['C:/cygwin64/Cygwin.bat' && './iv4_console.exe 
       ../embedded/LUA/analysis/verbose-udp-example.lua']... 

を置き換えることで、この問題を解決することができるはずです。お役に立てれば!

関連する問題