Windows / Linux / OS XでPythonスクリプトを実行する簡単な方法はありますか?
後者の2つではsubprocess.Popen("/the/script.py")
機能しますが、Windowsでは次のエラーが発生します。
Traceback (most recent call last):
File "test_functional.py", line 91, in test_functional
log = tvnamerifiy(tmp)
File "test_functional.py", line 49, in tvnamerifiy
stdout = PIPE
File "C:\Python26\lib\subprocess.py", line 595, in __init__
errread, errwrite)
File "C:\Python26\lib\subprocess.py", line 804, in _execute_child
startupinfo)
WindowsError: [Error 193] %1 is not a valid Win32 application
monkutのコメント:ユースケースは明確ではありません。なぜサブプロセスを使用してPythonスクリプトを実行するのですか?スクリプトをインポートして必要な関数を呼び出すのを妨げるものはありますか?
Pythonコマンドラインツールの全体的な機能をテストするための簡単なスクリプトを書いていました(さまざまなプラットフォームでテストするため)。基本的に、一時フォルダーに多数のファイルを作成し、これに対してスクリプトを実行して、ファイルの名前が正しく変更されていることを確認する必要がありました。
スクリプトをインポートして関数を呼び出すこともできましたが、それはに依存しsys.argv
て使用するsys.exit()
ため、次のようなことを行う必要がありました。
import sys
import tvnamer
sys.argv.append("-b", "/the/folder")
try:
tvnamer.main()
except BaseException, errormsg:
print type(errormsg)
また、何か問題が発生した場合に備えて、デバッグ用にstdoutとstderrをキャプチャしたいと思いました。
もちろん、より良い方法は、よりユニットテスト可能な方法でスクリプトを書くことですが、スクリプトは基本的に「完了」しており、「1.0」リリースを実行する前にテストの最終バッチを実行しています(その後、書き直し/再構築を行うため、これははるかに整然としていて、よりテスト可能になります)
sys.executable
基本的に、変数を見つけた後、スクリプトをプロセスとして実行する方がはるかに簡単でした。私はそれをシェルスクリプトとして書いたでしょうが、それはクロスプラットフォームではなかったでしょう。最終的なスクリプトはここにあります