Ich versuche eine Handvoll lokaler Bash-Skripte aufzurufen, die ich für Health-Check-Anwendungen auf Remote-Servern geschrieben habe.Einlesen von ssh aus einer Datei mit subprocess.Popen()
ssh -q <servername> "bash -s" -- < ./path/to/local/script.bash
Das obige funktioniert einwandfrei in der Befehlszeile. Allerdings, wenn ich den Anruf in Python wickeln, ich erhalte immer Fehler besagt:
bash: /path/to/file/script.bash: No such file or directory
Was meinen Python, ich bin mit dem Subprozess-Modul. Python:
bashcmd="ssh -q %s \"bash -s\" -- < ./%s" % (<server>,<bashfilepath>)
process=subprocess.Popen(bashcmd.split, stdout=subprocess.PIPE)
output, error = process.communicate()
Jede mögliche Hilfe würde geschätzt!
Warum haben Sie ein explizites '. /' Vor den 'bashfilepath' Wert gesetzt? Beginnen Sie mit dem Entfernen und stellen Sie sicher, dass Ihr 'bashfilepath'-Wert korrekt ist. – roaima
@roima In dieser Frage geht es wirklich darum, wie man 'stdin' mit Python' subprocess.Popen() 'setzt. Die Frage besagt, dass das Beispiel in der Shell funktioniert. Die Änderungen in meiner Antwort auf das Python-Programm haben das Problem gelöst. Das Problem hat die Python-API nicht korrekt verwendet. Hilfeseite zu [off-topic] (https://unix.stackexchange.com/help/on-topic) sagt zu Programmierfragen außer Shell-Scripting: "* Wenn Ihre Frage eine Programmierfrage ist, die Programmierkenntnisse in anderen Sprachen erfordert als Unix-Shell-Skriptsprachen, fragen Sie auf Stack Overflow. * " – sebasth