1

次のエラーが表示されます。以下に示すビルドルートディレクトリから「build/envsetup.sh」を実際に見ることができますが、このエラーが引き続き発生します。

次の行に何か問題がありますか?

  makecommand=Popen(['source build/envsetup.sh'],stderr=PIPE)" 

BUILD_ROOT_DIR /ローカル/mnt/ワークスペース/AU

Traceback (most recent call last):
  File "test.py", line 266, in <module>
    main()
  File "test.py", line 263, in main
    cherrypick(base_change,SCRIPT_ROOT)
  File "test.py", line 204, in cherrypick
    makebuild(change)
  File "test.py", line 97, in makebuild
    makecommand=Popen(['source build/envsetup.sh'],stderr=PIPE)
  File "/usr/lib/python2.6/subprocess.py", line 633, in __init__
    errread, errwrite)
  File "/usr/lib/python2.6/subprocess.py", line 1139, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory
4

3 に答える 3

3

Popen を呼び出すときは、文字列コマンドを渡すかshell=True、リストを渡す必要があります。コマンドを次のように変更してみてください。

makecommand=Popen(['source', 'build/envsetup.sh'],stderr=PIPE)

私は Popen の使用法についてコメントしているだけで、実行中の実際のコマンドに関連するものではありません。

于 2012-12-31T06:09:50.563 に答える
2

次のパラメーターを追加してみてください: shell=True

コード:

 makecommand=Popen('source build/envsetup.sh',stderr=PIPE, shell=True)

プログラムのコンテキストによっては、これがセキュリティ上の問題につながる可能性があるという免責事項が Pythonドキュメントに記載されています。

IMO、おそらくstdoutとstderrの両方をパイプして変数を分離し、communicationメソッドを使用してコマンドを呼び出す必要があります。出力とエラーをより簡単に処理できるようになります。

コード:

 cmd_out, cmd_err = Popen('source build/envsetup.sh', stdout=PIPE, stderr=PIPE, shell=True).communicate()

頑張ってください!

于 2012-12-31T06:15:32.847 に答える
0

source実行可能ファイルではなく、シェルの組み込みです。"sh build/envsetup.sh"代わりに試してください。そしてまた、jdiが言ったこと。

于 2012-12-31T06:09:55.237 に答える