9

Windowsで、現在「一時停止」で終了するbatスクリプトを実行しており、ユーザーに「続行するには何かキーを押してください...」とプロンプトを表示します

このシナリオではファイルを編集することができず、決して来ない入力を待ってハングアップするのではなく、スクリプトを終了する必要があります。これを実行して、プロンプトを無効にするか回避する方法はありますか?

入力にパイピングを試みましたが、役に立たないようです。このスクリプトは、subprocess.Popen を介して Python から実行されています。

4

4 に答える 4

18

実行してみてくださいcmd.exe /c YourCmdFile < nul

YourCmdFile-バッチスクリプトへのフルパス

于 2012-07-30T21:13:07.867 に答える
5
subprocess.call("mybat.bat", stdin=subprocess.DEVNULL)

ウィンドウからの入力を呼び出しmybat.batてリダイレクトnulします(他の回答に示されているように一時停止を無効にします)

于 2016-01-12T17:26:30.923 に答える
4

これは少し苦痛であることが判明しました。Maximus からの nul のリダイレクトはうまくいきました、ありがとう!

それをPythonで動作させることに関しては、次のようになりました。私はから始めました:

BINARY = "C:/Program Files/foo/bar.exe"
subprocess.call([BINARY])

リダイレクトを追加しようとしましたが、 subprocess.call がすべてをうまくエスケープしすぎて、リダイレクトが失われます。

subprocess.call([BINARY + " < nul"])
subprocess.call([BINARY, " < nul"])
subprocess.call([BINARY, "<", "nul"])

shell=True の使用は機能しませんでした。これは、BINARY のスペースが原因で、実行可能ファイルを見つけようとして窒息したためです。

subprocess.call([BINARY + " < nul"], shell=True)

結局、私は os.system に戻り、リダイレクトを取得するために自分自身をエスケープする必要がありました。

os.system(quote(BINARY) + " < nul")

理想的ではありませんが、仕事は完了します。

最後のサブプロセスの例をバイナリ内のスペースで動作させる方法を誰かが知っているなら、それは大いに感謝されるでしょう!

于 2012-07-31T14:40:26.773 に答える