質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1521閲覧

subprocess.callの質問

skysoul

総合スコア111

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

1グッド

1クリップ

投稿2020/08/18 08:04

編集2020/08/18 10:44

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)の形が適切ではないのであれば、違う方法でやりたいです。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quickquip

2020/08/18 08:11 編集

OSを書きましょう (それはそれとして、質問のコードはエラーになりました)
skysoul

2020/08/18 08:12

どのようなエラーですか?
quickquip

2020/08/18 08:17

macOSだと [Errno 2] No such file or directory になるのですが(正しい挙動です)、OSが違うことで挙動が違っているだけでしょう。
skysoul

2020/08/18 10:45

そのファイルすらできていないみたいですね。 私のほうは、Hello.pyはあります
bsdfan

2020/08/19 00:06

subprocess.call() のpythonをフルパスで書いてみたらどうでしょう。 C:\Users\***\AppData\Local\Microsoft\WindowsApps\python.exe のpythonが実行されている可能性はないですか?
quickquip

2020/08/19 05:40

> そのファイルすらできていないみたいですね。 そう思ったならotnさんの回答の意味を理解できてないということになりますね。
skysoul

2020/08/19 06:21

時間差です。2020/08/18 19:45時点では編集されていなかったから、そう思ったのです
quickquip

2020/08/19 06:27

確かにそうですね。失礼しました。
dameo

2020/08/20 08:21 編集

この手の問題はデバッガーで追っていくなどした方が解決しやすいですよ。 「一瞬コマンドプロンプトが立ち上がる」とあるので、多分callは無事shell(cmd.exe)を起動し、それがそのコマンドプロンプト上で動作しています。次は起動したshellがpythonを実行しようとするのですが、そこで何が起きているかは分かりませんね。仮に問題が起きたとして開いたコマンドプロンプト上に表示されるので...。 ただ、元のプログラムがエラーを検出していない時点でcmdの起動もpythonの呼出も成功しているのではないかと思います。成功していれば動かない理由もないので、多分動いているでしょう。 なので、一瞬hello表示してそのまますぐ消えてしまっただけではないかと思います。 Hello.py側で標準入力から一行入力を待つようにしてあげれば確認できるかと思います。
dameo

2020/08/20 08:33

すみません。cmd起動は嘘でした。普通に直に起動してますね。多分CreateProcess系APIがコマンドラインを直接受け取るからそうなってるだけってことではないかと思います。コンソールプログラムなので、標準のターミナルがついてるだけです。
dameo

2020/08/20 10:15

質問者さん視点で書けてなかったですね。もう一度ちゃんと書くと、、、 「一瞬コマンドプロンプトが立ち上がる」とあるので、多分callはpythonを起動し、それがコンソール(cmd.exeなどが起動する黒い画面)上で表示されます。pythonはHello.pyを読み込んで実行するわけですが、そこで何が起きているかは分かりませんね。仮に問題が起きたとして開いたコンソール上に表示されてすぐ消えてしまってるので...。 ただ、元のプログラムがエラーを検出していない時点でpythonの起動もHello.pyの呼出も成功しているのではないかと思います。なので、一瞬hello表示してそのまますぐ消えてしまっただけではないかと思います。 Hello.py側でinput()などで標準入力から入力を待つようにしてあげれば確認できるかと思います。
skysoul

2020/08/22 00:04

ありがとうございます。できました
guest

回答2

0

エラーメッセージが表示されないというのは、実行環境がおかしいです。

シェルのコマンドライン解釈機能を使うときは、shell=Trueを付けます。

Python

1subprocess.call('python %s' % path, shell=True)

shell=Trueを付けると、「pythonというコマンドをHello.pyを引数として実行」ということになり、
付けないと「"python Hello.py"というコマンドを実行」ということですが、そんなおかしなファイル名のコマンドは無いのでエラーになります。

投稿2020/08/18 08:15

編集2020/08/19 03:57
otn

総合スコア84555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skysoul

2020/08/18 08:16

subprocess.call('python %s' % path, shell=True) にしてもエラーも何も出ません。
otn

2020/08/18 08:18

> 一瞬コマンドプロンプトが立ち上がるだけで、he もしかして、WindowsのExplorerからダブルクリックで実行していませんか?それは駄目です。 コマンドプロンプトを開いて、「python ファイルのフルパス」と入力して実行しましょう。
skysoul

2020/08/18 10:35

いいえ。python公式サイトから手に入れた、エディターでRun Module ってところを押しています。
otn

2020/08/18 11:39

コマンドプロンプトを開いて、「python ファイルのフルパス」と入力して実行しましょう。
skysoul

2020/08/18 23:32

それでも何も表示されません。
otn

2020/08/19 03:52

そのコマンドプロンプトの内容をコピペしてください。 あと、実行しているファイルは質問文のものとshell=Trueを除いて全く同一ですか?
skysoul

2020/08/19 06:25

C:\Users\USER>python フルパス\test34(filestart).pyです。
bsdfan

2020/08/19 08:00

Windowsの場合、shell=Trueはなくても動くんですよ。 > Windows で shell=True とすると、COMSPEC 環境変数がデフォルトシェルを指定します。 > Windows で shell=True を指定する必要があるのは、実行したいコマンドがシェルに組み込 > みの場合だけです (例えば dir や copy)。バッチファイルやコンソールベースの実行ファイル > を実行するために shell=True は必要ありません。 (https://docs.python.org/ja/3/library/subprocess.html より)
otn

2020/08/19 08:08

> Windowsの場合、shell=Trueはなくても動くんですよ。 ああ、そうなんですね。なるほど。OSのAPiが違うからですね。 逆に空白を含んだファイル名の場合は" "で囲むのかな。
otn

2020/08/19 11:14 編集

このコメント削除。次のコメント参照。
otn

2020/08/19 11:14

ああ、わかった。Windowsということで、 "C:\Users\ユーザ名\AppData\Local\Microsoft\WindowsApps\python.EXE" が動いているんでしょう。 pythonと書くのでなく、インストールしたpython.exeをフルパスで指定してください。 インストール時にPATHへの追加を指定しなかったものと思われます。
Bull

2020/08/19 11:39

Windows の場合、py.exe というランチャーがインストールされているはずです。 py.exe を使えば、python.exe へのパスを通す必要はないです。
skysoul

2020/08/22 00:08

pythonのフルパス 実行したいファィルのフルパス ってことですか?
otn

2020/08/22 01:57

そうです。 フルパスで動作確認した上で、PATHに登録するなり、py.exeを使うなり。 py.exeを使う場合はpy.exeの動作原理を理解しましょう。
guest

0

ベストアンサー

Python

1subprocess.call('py %s' % path)

としたら、どうでしょうか?

実行はコマンドプロンプトで行ってください。
あるいは、IDLE から実行するなら

Python

1import subprocess 2 3path = 'Hello.py' 4 5f = open(path, 'w') 6f.writelines("print(\"hello world!\")\ninput()\n") 7f.close() 8 9subprocess.call(f'py %s' % path)

とすればいいじゃないかと。

投稿2020/08/19 10:13

編集2020/08/19 10:33
Bull

総合スコア986

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

skysoul

2020/08/22 00:02

できました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問