web-dev-qa-db-ja.com

Python subprocess.Popen()error(No such file or directory)

Python functions。現在のディレクトリ内で、os.system("ls")がファイルを見つける間、コマンドsubprocess.Popen(["wc -l filename"], stdout=subprocess.PIPE) 動作しません。

ここに私のコードがあります:

>>> import os
>>> import subprocess
>>> os.system("ls")
sorted_list.dat
0
>>> p = subprocess.Popen(["wc -l sorted_list.dat"], stdout=subprocess.PIPE)File "<stdin>", line 1, in <module>
File "/Users/a200/anaconda/lib/python2.7/subprocess.py", line 710, in __init__
    errread, errwrite)
File "/Users/a200/anaconda/lib/python2.7/subprocess.py", line 1335, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
18
user2105632

引数をリストとして渡す必要があります(推奨):

subprocess.Popen(["wc", "-l", "sorted_list.dat"], stdout=subprocess.PIPE)

それ以外の場合、Shell=True文字列全体をコマンドとして使用する場合は、"wc -l sorted_list.dat"を渡す必要があります(推奨されません。セキュリティ上の問題になる可能性があります)。

subprocess.Popen("wc -l sorted_list.dat", Shell=True, stdout=subprocess.PIPE)

Shell=Trueセキュリティの問題の詳細をお読みください こちら

33
bakkal

このエラーは、wc -l sorted_list.datという名前のコマンドを実行しようとしているため、つまり"/usr/bin/wc -l sorted dat"のような名前のfileを見つけようとしているために発生します。

引数を分割します:

["wc", "-l", "sorted_list.dat"]
5
Antti Haapala