6

Python でサブプロセスを使用するのに苦労しています。これが私の仕事です:

  1. コマンド ライン経由で API を開始します (これは、コマンド ラインで任意の引数を実行する場合と同じです)。
  2. API が起動したことを確認します。これを行う最も簡単な方法は、標準をポーリングすることです。
  3. API に対してコマンドを実行します。新しいコマンドを実行できるようになると、コマンド プロンプトが表示されます
  4. 標準出力をポーリングしてコマンドが完了したことを確認します (API はロギングをサポートしていません)。

これまでに試みたこと:
1. Popen を使用してここで立ち往生しています。これを使えばうまくいくことを理解してい subprocess.call("put command here")ます。次のようなものを使用したかったのです。

import subprocess

def run_command(command):
  p = subprocess.Popen(command, shell=True,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.STDOUT)

私が使用する場所ですrun_command("insert command here")が、これは何もしません。

2.に関しては、答えはここに似ているはずだと思います: Running shell command from Python and capture the output , but as I can't get 1. to work, まだ試していません.

4

2 に答える 2

8

少なくとも実際にサブプロセスを開始するには、Popenオブジェクトに実際に通信するように指示する必要があります。

def run_command(command):
    p = subprocess.Popen(command, shell=True,
            stdout=subprocess.PIPE,
            stderr=subprocess.STDOUT)
    return p.communicate()
于 2013-01-21T12:42:58.950 に答える
7

シェルベースのプログラムと対話するために特別に設計されたモジュールであるPexpectを調べることができます。

たとえば、scpコマンドを起動し、パスワードプロンプトを待つと、次のようになります。

child = pexpect.spawn('scp foo myname@host.example.com:.')
child.expect ('Password:')
child.sendline (mypassword)

Python 3バージョンについては、Pexpect-uを参照してください。

于 2013-01-21T12:56:30.270 に答える