3

(または、など) が呼び出されるpexpect.spawnまでオブジェクトは非アクティブですか、または呼び出されたプロセスはすぐに開始されますか? 例えば:expectinteractsend

import pexpect
process = pexpect.spawn("echo HELLO")
print ("Process created? Or run?")
process.expect("HELLO")

printステートメントが発生したとき、すでにエコー コマンドを裏で実行しており、呼び出しが処理されるpexpectまでリターンを保留しているだけですか? または、または同様の最初の呼び出しまでexpect何も起こらなかった (実行されていない) か?echoexpect

乾杯

4

1 に答える 1

3

コマンドが渡されるpexpect.spawn()と、すぐにコマンドをフォークして呼び出します。あなたの例のechoコマンドはすでに実行されているでしょう。

これは、spawnコンストラクターのドキュメントに含まれています。

これはコンストラクターです。コマンドパラメータは、コマンドとコマンドへの引数を含む文字列にすることができます。例えば::

child = pexpect.spawn ('/usr/bin/ftp')
child = pexpect.spawn ('/usr/bin/ssh user@example.com')
child = pexpect.spawn ('ls -latr /tmp')

次のような引数のリストを使用して作成することもできます::

child = pexpect.spawn ('/usr/bin/ftp', [])
child = pexpect.spawn ('/usr/bin/ssh', ['user@example.com'])
child = pexpect.spawn ('ls', ['-latr', '/tmp'])

この後、子アプリケーションが作成され、通信できるようになります。

私はこれをソースコードを見て確認しました; コンストラクターは_spawn()、次のように文書化されている呼び出しを呼び出します。

これにより、指定されたコマンドが子プロセスで開始されます。これは、ptyのすべてのfork/execタイプのものを実行します。これはによって呼び出され__init__ます。argsが空の場合、コマンドは解析され(スペースで分割)、argsは解析された引数に設定されます。

于 2012-09-06T15:17:34.817 に答える