まず、セットアップと目標についてのビット。私はCoreがインストールされており、Pythonスクリプトからいくつかのコマンドを実行したいというセッションが実行されています。いくつかのコマンドしかなく、かなり単純なコマンドなので、subprocess.Popen
をcoresendmsgのキックに使用すると、スクリプトにコアコントロールプレーンを実装しようとしたのではないでしょうか。私のpythonからこのコマンドを実行するとcoresendmsg
が適切にcmdと引数を解析持ついくつかの問題を持っていたPopen()からスクリプトが呼び出されたときに、スクリプト引数が正しく解析されない
coresendmsg exec node=2 num=1001 cmd='ifconfig eth0 192.168.0.1'
次のように
(CLIから実行される)コマンドの例があります。以下のように実行すると、coresendmsg
はeth0と192.168.0.1を別々の引数とチョークとみなします。これは意味があります。
s=subprocess.Popen(['coresendmsg',
'exec',
'-s 47854',
'node=2',
'num=1001',
'cmd=ifconfig eth0 192.168.0.1'])
私は、次のように変更した場合、coresendmsg
は現在、1つの引数としてCMDを考慮しますが、引数がcoresendmsg
に分割されている場合、単一引用符が含まれるようになりましたので、まだチョーク。これは、上記の例のように、同じ引用符でコマンドラインからcoresendmsg
を実行すると異なります。
s=subprocess.Popen(['coresendmsg',
'exec',
'-s 47854',
'node=2',
'num=1001',
'cmd=\'ifconfig eth0 192.168.0.1\''])
私が入り、coresendmsgを修正して引数を表示し、両方のケースをチェックしたので、私はこれを知っています。 CLIからの実行上記のコマンドは、私はこれを参照する場合:
['exec', 'node=2', 'num=1001', 'cmd=ifconfig eth0 192.168.0.1']
をしかしパイソンから実行したとき、私は私が物事を引用する方法に応じて、以下のいずれかを取得します:
['exec', 'node=2', 'num=1001', 'cmd=ifconfig', 'eth0', '192.168.0.1']
['exec', 'node=2', 'num=1001', "cmd='ifconfig eth0 192.168.0.1'"]
['exec', 'node=2', 'num=1001', 'cmd="ifconfig eth0 192.168.0.1"']
私がこの仕事をすることができますbashスクリプトですが、スクリプトから、スクリプトからスクリプトを実行するのではなく、むしろ実行します。この問題を解決する可能性のある候補を探してください。
「-s 47854」があることに気付きました。それを '' -s '、' 47854 'に変更してみてください –