IDLEインタラクティブシェルからPythonスクリプトを実行する方法


102

IDLEインタラクティブシェル内からPythonスクリプトを実行するにはどうすればよいですか?

以下はエラーをスローします。

>>> python helloworld.py
SyntaxError: invalid syntax

どんなhelloworld.py感じ?
TerryA 2013年

ええ、それはあなたのコードに問題があることを意味しますあなたのコードを投稿してください!
シリアル

12
いいえ、必ずしもそうとは限りません。OPがpython helloworld.pyIDLEシェルウィンドウに入力していて、それが機能しない可能性があります。
Ned Deily 2013年

また、標準の通訳では機能しません。この問題は、通訳プロンプトがコマンドラインプロンプトであると人々が誤って考える前に発生しました。
Terry Jan Reedy 2015年

ネッド・デイリーがあなたの質問に正しく答えた場合、その答えを受け入れる必要があります。これは、他の開発者が正しい答えをすばやく見つけるのにも役立ちます。
クリシュナオザ

回答:


141

Python3

exec(open('helloworld.py').read())

ファイルが同じディレクトリにない場合:

exec(open('./app/filename.py').read())

グローバル/ローカル変数の受け渡しについては、https://stackoverflow.com/a/437857/739577を参照してください


非推奨のPythonバージョン

Python2 組み込み関数:execfile

execfile('helloworld.py')

通常、引数を指定して呼び出すことはできません。しかし、これは回避策です:

import sys
sys.argv = ['helloworld.py', 'arg']  # argv[0] should still be the script name
execfile('helloworld.py')

2.6以降非推奨:popen

import os
os.popen('python helloworld.py') # Just run the program
os.popen('python helloworld.py').read() # Also gets you the stdout

引数あり:

os.popen('python helloworld.py arg').read()

事前使用:サブプロセス

import subprocess
subprocess.call(['python', 'helloworld.py']) # Just run the program
subprocess.check_output(['python', 'helloworld.py']) # Also gets you the stdout

引数あり:

subprocess.call(['python', 'helloworld.py', 'arg'])

詳細はドキュメントを読んでください:-)


この基本でテスト済みhelloworld.py

import sys
if len(sys.argv) > 1:
    print(sys.argv[1])

2
コマンドライン引数を使用した例も追加できますか?
ViFI 2016

1
Python3では機能せず、アスカーはPythonのバージョンを明示的に指定していませんでした
Suncatcher

execPython3用に追加
Hugues Fontenelle


24

IDLEシェルウィンドウは、ターミナルシェルと同じではありません(実行中shまたはなどbash)。むしろ、Pythonインタラクティブインタープリター(python -i)にいるようなものです。IDLEでスクリプトを実行する最も簡単な方法はOpenFileメニューからコマンドを使用することです(これは実行しているプラ​​ットフォームによって少し異なる場合があります)、スクリプトファイルをIDLEエディターウィンドウにロードしてから、Run-> Run Moduleコマンド(ショートカットF5)。


1
ただし、引数を渡すことはできません。:(
エリカケイン

3
残念ながら、いいえ、コマンドライン引数を渡しながらIDLEでPythonファイルを実行するのは簡単ではありません。IDLEがこれを行うには、未解決の未解決の問題があります(bugs.python.org/issue5680)。テストの回避策の1つはsys.argv、たとえば通常のif __name__ == "__main__"ボイラープレートの下など、プログラムの最初に手動で初期化することです。
Ned Deily、2015年

この回答は、IDLEシェルを使用してPythonスクリプトを実行できない理由を明らかにしています。ありがとう@NedDeily
arsho

1
IDLE 3.7.4以降、引数を指定してモジュールを実行できるようになりました。新しいRun-> Run with Customized...コマンド(ショートカットShift + F5)を使用すると、引数を指定できるポップアップが開きます。残念ながら現在はそれらを記憶していないので、実行するたびに貼り付けます。
Dan Nolan

6

これを試して

import os
import subprocess

DIR = os.path.join('C:\\', 'Users', 'Sergey', 'Desktop', 'helloword.py')

subprocess.call(['python', DIR])

4

execFile('helloworld.py')私のために仕事をします。注意すべきことは、.pyファイルがPythonフォルダー自体にない場合は、完全なディレクトリ名を入力することです(Windowsでは少なくともこれが当てはまります)。

例えば、 execFile('C:/helloworld.py')


4

最も簡単な方法

python -i helloworld.py  #Python 2

python3 -i helloworld.py #Python 3

2

例えば:

import subprocess

subprocess.call("C:\helloworld.py")

subprocess.call(["python", "-h"])

2
subprocess.call(r'c:\path\to\something.py')私にはうまくいきません。OSError:[WinError 193]%1は有効なWin32アプリケーションではありません
Terry Jan Reedy

このインポートを試しますos import subprocess DIR = os.path.join( 'C:\\'、 'Users'、 'Sergey'、 'Desktop'、 'a.py')subprocess.call(['python'、DIR] )
Sergey Nosov

1

Python 3では、はありませんexecFileexecたとえば、組み込み関数を使用できます。

import helloworld
exec('helloworld')

1

IDLEでは、次の作品:-

import helloworld

なぜ機能するのかはよくわかりませんが、機能します。


あなたがしていることは、シェルから実行されていないモジュールをロードすることです。2つの違いの1つは次のとおりです。1)モジュールのロードモジュール名name __ =ファイル名2)シェルモジュール名から実行_name __ = " _main "
tanweer alam

実際にインポートして実行していないため、プログラムを実行するのに適した方法ではありません。その内容はインポートされ、利用したくない場合は無意味になります。
Abhijeet.py

1

IdleなどのPythonシェルまたはDjangoシェルでPythonスクリプトを実行するには、exec()関数を使用して次のように実行できます。Exec()は、コードオブジェクト引数を実行します。Pythonのコードオブジェクトは、単にコンパイルされたPythonコードです。したがって、まずスクリプトファイルをコンパイルしてから、exec()を使用して実行する必要があります。あなたのシェルから:

>>>file_to_compile = open('/path/to/your/file.py').read()
>>>code_object = compile(file_to_compile, '<string>', 'exec')
>>>exec(code_object)

Python 3.4を使用しています。参照してください。コンパイルおよびexecの詳細な情報のためのドキュメントを。


1

私はこれをテストしました、そしてそれはちょっとうまくいきます:

exec(open('filename').read())  # Don't forget to put the filename between ' '

見積もりの​​ヒントをありがとう、これは私のために働いた。賛成。
Forever Learner

1

あなたは2つの方法でそれを行うことができます

  • import file_name

  • exec(open('file_name').read())

ただし、プログラムが実行されている場所にファイルを保存する必要があります。


0

Windows環境では、次の構文でPython3シェルコマンドラインでpyファイルを実行できます。

exec(open( 'file_nameへの絶対パス').read())

以下は、Pythonシェルコマンドラインから単純なhelloworld.pyファイルを実行する方法を説明しています

ファイルの場所:C:/Users/testuser/testfolder/helloworld.py

ファイルの内容:print( "hello world")

このファイルは、Python3.7 Shellで次のように実行できます。

>>> import os
>>> abs_path = 'C://Users/testuser/testfolder'
>>> os.chdir(abs_path)
>>> os.getcwd()
'C:\\Users\\testuser\\testfolder'

>>> exec(open("helloworld.py").read())
hello world

>>> exec(open("C:\\Users\\testuser\\testfolder\\helloworld.py").read())
hello world

>>> os.path.abspath("helloworld.py")
'C:\\Users\\testuser\\testfolder\\helloworld.py'
>>> import helloworld
hello world

プログラムをインポートして実行することは、適切なオプションではありません。最初はそれを使用していましたが、インポートすると(ごくわずかですが)プログラムの効率が低下するなど、潜在的な問題について知っています。
Abhijeet.py

0

もう1つの選択肢があります(Windowsの場合)-

    import os
    os.system('py "<path of program with extension>"')

0

Pythonコンソールでは、次の2つの方法を試すことができます。

同じ作業ディレクトリの下に、

1. >> helloworldをインポートする

#変数xがある場合、IDLEで出力できます。

>> helloworld.x

#関数funcがある場合は、次のように呼び出すこともできます。

>> helloworld.func()

2. >> runfile( "./ helloworld.py")

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.