2012-03-02 6 views
9

私は以下のことを試していますが、エラーが発生しました。私はPythonシェル/スクリプト/コンソール上でPythonを起動してWindowsコンソール上でそれを実行しようとしました。何も動作していないようです。常に同じエラー。Windows上のPython 2.7.2でsubprocess.call()を使用する際の問題

from subprocess import call 
>>>pat = "d:\info2.txt" 

>>> call(["type",pat]) 

>>>Traceback (most recent call last): 
    File "<pyshell#56>", line 1, in <module> 
    call(["type",pat]) 
    File "C:\Python27\lib\subprocess.py", line 493, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "C:\Python27\lib\subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "C:\Python27\lib\subprocess.py", line 893, in _execute_child 
    startupinfo) 
WindowsError: [Error 2] The system cannot find the file specified 

ここで間違っていることは誰でも知っていますか?

でも、単純なcall(["date"]]でも同じエラーで失敗します。

私は以下を使用しています: Windows 7マシン上のPython 2.72 32bit版。 Pythonと他のほとんどのプログラミング言語で

+1

'あなたの例ではcall'されているもの?あなたの輸入品を含めてください? 'subprocess'パッケージの関数を意味すると仮定すると、' call(["data"]) 'は私のシステムで完全に正常に動作するので、エラーを再現することはできません。あなたのPythonのバージョン、OS、およびそのようなものは何ですか? –

+1

あなたが求めている内容は次のとおりです:はい、callはサブプロセスの関数です。私は上記の必要な編集を行った。状況が明らかになることを願っています。 – Vinayaka

+0

@David Zwicker:WindowsのDOSコマンド 'date'は、日付を表示または設定します。 – BioGeek

答えて

17

callshell=Trueを追加します:

>>> import subprocess 
>>> subprocess.call('dir', shell=True) 
0 

ご覧のとおり、dirの出力ではなく、戻り値として値を返します。また、コマンドが完了するまで待ちますので、実行すると、新しい日付を入力するまで待ちます。

>>> subprocess.call('date', shell=True) 

編集:出力をキャプチャする場合は、subprocess.check_outputを使用します。たとえば、DOSコマンドtypeは、ファイルの内容を表示します。だから、あなたのファイルinfo2.txtユーザー名が含まれていると、あなたはどうなる:subprocessについての詳細は、具体的には、this article by Doug Hellmannを見るために、このcomprehensive overview to a related questionを参照してください、Pythonで外部コマンドを呼び出すためにすべての方法については

>>> import subprocess 
>>> path = r'd:\info2.txt' 
>>> output = subprocess.check_output(['type', path], shell=True) 
>>> print output 
Vinu 

を。

+0

ありがとうございました@BioGeekは役に立ちました。それは私がエラーの問題を解決するのに役立ちますが、主な原因を助けません。私がしたかったのは、cmdコンソールにファイルを書き出すことでした**。 – Vinayaka

+0

cmd_consoleにファイルを_typeで入力するとどういう意味ですか? DOSコマンド 'type'を使ってファイルの内容を取得したい場合は、私の編集を参照してください。あなたが他のものを望むなら、明確にしてください。 – BioGeek

+0

いいえ、私は今解決策を持っています。あなたの助けに感謝@BioGeek – Vinayaka

1
pat = "d:\info2.txt" 

\は倍増していない限り、文字列に含まれていないエスケープ文字、です。生の文字列を使用するか、エスケープ文字エスケープのいずれか:

pat = "d:\\info2.txt" 
+0

あなたの返事をありがとう、私もそれを試みた。それもうまくいきません。あなたの注意を引くことを望みます:** call(["date"])**も同じエラーで失敗しています。 – Vinayaka

0
\\\エスケープ

pat = "d:\\info2.txt" 

または "生" の文字列を使用します。

pat = r"d:\info2.txt" 
+0

あなたの返事をありがとう、私もそれを試みた。それもうまくいきません。私はあなたの注意を引くようにしたいと思います:** call(["date"])**も同じエラーで失敗しています – Vinayaka

3

'type'コマンドは内部コマンドであるため、CMD.EXEというコマンドインタープリタ/シェルの内部で実行されません。代わりに "cmd.exe type filename"を呼び出さなければなりません。 正確なコードは次のとおりです。

call(['cmd','/C type abc.txt']) 
関連する問題