Ich bin ein Bash-Skript in Python (3.4.3) mit subprocess Aufruf:
import subprocess as sp
res = sp.check_output("myscript", shell=True)
und myscript enthält eine Zeile:
ps -ef | egrep somecommand
Es gab nicht das gleiche Ergebnis als wenn myscript direkt in einem Bash Shell-Fenster aufgerufen wird. Nach viel Basteln stellte ich fest, dass, wenn mein Skript in Python aufgerufen wird, das Stdout von "ps -ef" durch den aktuellen $ COLUMNS-Wert des Shell-Fensters abgeschnitten wurde, bevor es an "egrep" weitergeleitet wurde. Für mich ist das verrückt, denn einfach durch die Größenänderung des Shell-Fensters kann der Befehl andere Ergebnisse liefern!
ich es geschafft, zu „lösen“ das Problem env Argument der subprocess Anruf, indem ein breit genug SÄULEN angeben:
res = sp.check_output("myscript", shell=True, env={'COLUMNS':'100'})
Dies ist jedoch für mich sehr schmutzig aussieht und ich verstehe nicht, Warum findet die Kürzung nur im Python-Subprozess statt, aber nicht in einer Bash-Shell? Ehrlich gesagt bin ich erstaunt, dass dieses Verhalten im offiziellen Python-Dokument nicht dokumentiert ist, es sei denn, es handelt sich tatsächlich um einen Fehler - ich benutze Python 3.4.3. Was ist der richtige Weg, um dieses seltsame Verhalten zu vermeiden?
ohne Bezug: andere Umgebungsvariablen erhalten Sie 'env = dict (os.environ, COLUMNS = '100') verwenden könnte' statt 'env = { 'columns': '100'}' – jfs