python
1import subprocess 2 3path = 'Hello.py' 4 5f = open(path, 'w') 6f.writelines("print(\"hello world!\")") 7f.close() 8 9subprocess.call('python %s' % path) 10
これで、一瞬コマンドプロンプトが立ち上がるだけで、hello world!と、表示されません。
何がおかしいのでしょうか?
追記:
エラーは出ません。
環境
windows10,python3.8.1rc1
目的
プログラム中からPYTHONの別プログラムを実行させたい
もし、subprocess.call('python %s' % path)の形が適切ではないのであれば、違う方法でやりたいです。
OSを書きましょう
(それはそれとして、質問のコードはエラーになりました)
どのようなエラーですか?
macOSだと [Errno 2] No such file or directory になるのですが(正しい挙動です)、OSが違うことで挙動が違っているだけでしょう。
そのファイルすらできていないみたいですね。
私のほうは、Hello.pyはあります
subprocess.call() のpythonをフルパスで書いてみたらどうでしょう。
C:\Users\***\AppData\Local\Microsoft\WindowsApps\python.exe のpythonが実行されている可能性はないですか?
> そのファイルすらできていないみたいですね。
そう思ったならotnさんの回答の意味を理解できてないということになりますね。
時間差です。2020/08/18 19:45時点では編集されていなかったから、そう思ったのです
確かにそうですね。失礼しました。
この手の問題はデバッガーで追っていくなどした方が解決しやすいですよ。
「一瞬コマンドプロンプトが立ち上がる」とあるので、多分callは無事shell(cmd.exe)を起動し、それがそのコマンドプロンプト上で動作しています。次は起動したshellがpythonを実行しようとするのですが、そこで何が起きているかは分かりませんね。仮に問題が起きたとして開いたコマンドプロンプト上に表示されるので...。
ただ、元のプログラムがエラーを検出していない時点でcmdの起動もpythonの呼出も成功しているのではないかと思います。成功していれば動かない理由もないので、多分動いているでしょう。
なので、一瞬hello表示してそのまますぐ消えてしまっただけではないかと思います。
Hello.py側で標準入力から一行入力を待つようにしてあげれば確認できるかと思います。
すみません。cmd起動は嘘でした。普通に直に起動してますね。多分CreateProcess系APIがコマンドラインを直接受け取るからそうなってるだけってことではないかと思います。コンソールプログラムなので、標準のターミナルがついてるだけです。
質問者さん視点で書けてなかったですね。もう一度ちゃんと書くと、、、
「一瞬コマンドプロンプトが立ち上がる」とあるので、多分callはpythonを起動し、それがコンソール(cmd.exeなどが起動する黒い画面)上で表示されます。pythonはHello.pyを読み込んで実行するわけですが、そこで何が起きているかは分かりませんね。仮に問題が起きたとして開いたコンソール上に表示されてすぐ消えてしまってるので...。
ただ、元のプログラムがエラーを検出していない時点でpythonの起動もHello.pyの呼出も成功しているのではないかと思います。なので、一瞬hello表示してそのまますぐ消えてしまっただけではないかと思います。
Hello.py側でinput()などで標準入力から入力を待つようにしてあげれば確認できるかと思います。
ありがとうございます。できました
回答2件
あなたの回答
tips
プレビュー