0

SuperUserでの私の質問を参照すると、du -sh /media/ExternalHd/myfolder/*ターミナルから期待どおりに使用するという不可解な状況に直面していp=subprocess.Popen(['du', '-sh', '/media/ExternalHd/myfolder/*'], stdout=subprocess.PIPE)ますが、Pythonスクリプトで使用するとerror du: cannot access /media/ExternalHd/myfolder/*: No such file or directory

4

2 に答える 2

2

ターミナルは * を展開します。サブプロセスにそれを行うように指示するには:

p=subprocess.Popen('du -sh /tmp/*', shell=True)

または、さらに制御が必要な場合は、glob モジュールを使用して * を展開することもできます

于 2012-11-28T02:16:08.247 に答える
0

shell=Trueパラメータを subprocess.Popen 関数に追加する必要があります。シェルを呼び出して、環境変数、ファイル グロブなどを使用できるようにします。

p = subprocess.Popen(['du', '-sh', '/media/ExternalHd/myfolder/*'], stdout=subprocess.PIPE, shell=True)

ただし、セキュリティ上の問題があるため、使用を避ける必要があります。python サブプロセス モジュールのドキュメントshell=Trueの警告を参照してください。このような小さなスクリプトの場合、問題は発生しないかもしれませんが、覚えておいてください ;)

詳細については、別のスタックオーバーフローの質問に対するこの回答を参照してください。

于 2012-11-28T02:19:28.947 に答える