Mám nejaké zvláštne behaviorálne rozdielymedzi Pythonovým podprocesom () a os.systémom (), ktorý sa javí, že súvisí s setgidom. Rozdiel spôsobuje, že Perlove testy sú vyvolané, keď sa použije subproces.call (), čo spôsobuje problémy, pretože ja Nemajú schopnosť modifikovať všetky skripty Perlu, ktoré by potrebovali nepridaný kód.
Príklad „process.py“
#!/usr/bin/python
import os, subprocess
print "Python calling os.system"
os.system("perl subprocess.pl true")
print "Python done calling os.system"
print "Python calling subprocess.call"
subprocess.call(["perl", "subprocess.pl", "true"])
print "Python done calling subprocess.call"
"Subprocess.pl"
#!/usr/bin/perl
print "perl subprocessn";
`$ARGV[0]`;
print "perl subprocess donen";
Výstup - obe spustenia subprocess.pl by mali byť rovnaké, ale pri jednom spustení so subprocess.call () dôjde k malej chybe:
mybox> process.py
Python calling os.system
perl subprocess
perl subprocess done
Python done calling os.system
Python calling subprocess.call
perl subprocess
Insecure dependency in `` while running setgid at subprocess.pl line 4.
Python done calling subprocess.call
mybox>
Pri používaní dielu os.system () by som radšej radšej používal subprocess.check_call (), pretože je viac kompatibilný vpred a má pekné kontrolné správanie.
Akékoľvek návrhy alebo dokumentácia, ktoré by mohli vysvetliť, prečo sú tieto dva odlišné? Je možné, že v mojom lokálnom unixovom prostredí vyvoláva toto správanie niečo zvláštne?
odpovede:
2 pre odpoveď č. 1Myslím, že vaša chyba je s perl, alebo ako to jeinterakcie s prostredím. Váš backtick proces z nejakého dôvodu volá setgid. Jediným spôsobom, ako to dokážem replikovať, je setgid na / usr / bin / perl (-rwxr-sr-x). [Úpravy] S python setgid to tiež urobí!
[EDIT] Zabudol som ten os.systém je pracujem pre teba. Myslím si, že jediným relevantným rozdielom je, že v os.systéme je prostredie nie zdedené čiastkovým procesom. Prezrite si prostredie každého podprocesu a môžete nájsť svojho vinníka.
0 pre odpoveď č. 2
Nestáva sa mi to:
$ python proc.py
Python calling os.system
perl subprocess
perl subprocess done
Python done calling os.system
Python calling subprocess.call
perl subprocess
perl subprocess done
Python done calling subprocess.call
$ python --version
Python 2.5.2
$ perl --version
This is perl, v5.8.8 built for i486-linux-gnu-thread-multi
Aké sú vaše čísla verzií?
V akom účte máte účet?
EDIT:
Ospravedlňujeme sa za zmeškaný titul - nemám python 2.6 kdekoľvek ľahko prístupný, takže tento problém budem musieť opustiť.
EDIT:
Vyzerá to, že sme problém vyriešili - sgid na python 2.6.
Bolo by tiež zaujímavé zistiť, či subproces so škrupinou tiež nevyhýba problému.