web-dev-qa-db-ja.com

Pythonのサブプロセスモジュールをインストールする方法?

pipは、pypiのWebサイトでこのモジュールを見つけることができません。その秘密、インストール方法を教えてください。

Subprocess.callを介して新しいシェルプロセスを生成するモジュールが必要です。私は多くの例を見てきましたが、人々はimport subprocess、しかしそれがどのようにインストールされたかは誰にも示されません。

エラー、私が得た(念のために私が気を失い、何が起こっているのか理解していない場合):

Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\Alexander\Desktop\tests-runner>python run.py
Traceback (most recent call last):
  File "run.py", line 165, in <module>
    main()
  File "run.py", line 27, in main
    subprocess.call('py.test')
  File "C:\Python27\lib\subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\Python27\lib\subprocess.py", line 710, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 958, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified
11
avasin

Python 2.7にこのモジュールをインストールする必要はありません。これは組み込みの標準モジュールです。

documentation は、それがPython version 2.4。のためにライブラリに追加されたことを示しています。これは長い間私たちと共にありました。


質問の更新で表示されるエラーは、ファイルが見つからないというエラーほど散文的ではありません。 Popenを呼び出そうとしている実行可能ファイルが見つからない可能性があります。

そのトレースバックは、subprocessがインストールされ、インポートされたことを示します。問題は、単にsubprocess.call('py.test')の呼び出しが失敗することです。


将来の参考のために、これはインストールされていないモジュールをインポートしようとしたときに発生するトレースバックのタイプです。

 >>> import foo 
 Traceback(most recent call last):
 File ""、1行目、
 ImportError:foo [.____という名前のモジュール。]
8
David Heffernan

エラーテキストは誤解を招くものです。ほとんどのサブプロセスコマンドは、shellcmdが文字列のリストとして送信されることを想定しています。

これらの場合、shlexモジュールの使用を強くお勧めします。

import shlex

Shell_cmd = "py.test"  # or should it be "test.py" ?

subprocess_cmd = shlex.split(Shell_cmd)
subprocess.call(subprocess_cmd)

または、この単純な場合だけで:

subprocess.call(["py.test"])
2
Don Question