/ Zdá sa, že / Python 2.6 subprocess.call () vyvoláva správanie setgid, ktoré spúšťa Perlove citlivé kontroly. Ako môžem vyriešiť? - python, perl, subproces

Python 2.6 subprocess.call() sa zdá byť vyvolanie setgid správanie spustenie Perl je nakaziť kontroly.Ako môžem vyriešiť?-python, perl, podproces

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ď č. 1

Myslí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.