Python の subprocess.call() と os.system() の間に奇妙な動作の違いがあり、setgid に関連しているようです。違いは、subprocess.call() が使用されたときに Perl の汚染チェックが呼び出されることです。これは、汚染を除去するコードを追加する必要があるすべての Perl スクリプトを変更する能力がないため、問題を引き起こします。
例、「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"
「サブプロセス.pl」
#!/usr/bin/perl
print "perl subprocess\n";
`$ARGV[0]`;
print "perl subprocess done\n";
出力 - subprocess.pl の両方の実行は同じである必要がありますが、subprocess.call() で実行されたものは汚染エラーを取得します:
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>
os.system() の使用は機能しますが、subprocess.check_call() を使用する方がより前方互換性が高く、優れたチェック動作を備えているため、実際には subprocess.check_call() を使用したいと思います。
これら 2 つが異なる理由を説明する提案やドキュメントはありますか? これは、これらの動作を呼び出しているローカル UNIX 環境の奇妙な設定である可能性はありますか?