Bit über das Setup und Ziel zuerst; Ich habe Core installiert und eine Sitzung ausgeführt, die ich ein paar Befehle aus einem Python-Skript ausführen möchte. Da es nur ein paar Befehle gibt und sie ziemlich einfache Befehle sind, dachte ich, ich würde einfach subprocess.Popen
verwenden, um coresendmsg zu treten, anstatt zu versuchen, die Kernsteuerungsebene in meinem Skript zu implementieren.Skriptargumente wurden nicht korrekt analysiert, wenn das Skript von Popen() aufgerufen wurde
Ein Beispiel für den Befehl (von der CLI laufen) ist wie folgt:
coresendmsg exec node=2 num=1001 cmd='ifconfig eth0 192.168.0.1'
ich mit der Ausführung dieses Befehls von Python hatte einige Probleme haben und mit coresendmsg
richtig das cmd Argument analysieren. Wenn sie wie unten gezeigt ausgeführt wird, betrachtet coresendmsg
eth0 und 192.168.0.1 als separate Argumente und Drosseln, was für mich sinnvoll ist.
s=subprocess.Popen(['coresendmsg',
'exec',
'-s 47854',
'node=2',
'num=1001',
'cmd=ifconfig eth0 192.168.0.1'])
Wenn ich es dann auf die folgenden ändern, hält coresendmsg
nun die cmd als ein einziges Argument, aber Drosseln noch, weil die einfachen Anführungszeichen jetzt enthalten sind, wenn die Argumente in coresendmsg
aufgeteilt werden. Dies ist anders als wenn das coresendmsg
von der Kommandozeile mit den gleichen Anführungszeichen ausgeführt wird, wie im obigen Beispiel gezeigt.
s=subprocess.Popen(['coresendmsg',
'exec',
'-s 47854',
'node=2',
'num=1001',
'cmd=\'ifconfig eth0 192.168.0.1\''])
Ich weiß dies, weil ich in Coresendmsg ging und änderte, um die Argumente zu drucken, und beide Fälle überprüft. Wenn der Befehl oben läuft von CLI, sehe ich:
['exec', 'node=2', 'num=1001', 'cmd=ifconfig eth0 192.168.0.1']
aber, wenn sie von Python laufen bekomme ich eine der folgenden je nachdem, wie ich die Dinge zitieren:
['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"']
ich diese Arbeit machen kann aus ein Bash-Skript, aber ich würde lieber kein Skript ausführen, aus einem Skript, aus einem Skript. Suchen Sie nach Vorschlägen, die dieses Problem beheben könnten.
Ich bemerkte, Sie haben ''s 47854''. Versuchen Sie, das in "-s", "47854" zu ändern –