【问题标题】:run program in Python shell在 Python shell 中运行程序
【发布时间】:2011-11-17 06:26:27
【问题描述】:

我有一个演示文件:test.py。 在 Windows 控制台中,我可以使用以下命令运行该文件:C:\>test.py

如何改为在 Python Shell 中执行文件?

【问题讨论】:

标签: python executable


【解决方案1】:

execfile 用于Python 2

>>> execfile('C:\\test.py')

exec 用于Python 3

>>> exec(open("C:\\test.py").read())

【讨论】:

  • 在版本 3(我的版本)中等效为:exec(open("C:\\test.py").read())。谢谢!
  • @loops 我得到:SyntaxError: (Unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \uXXXX excape。这是什么意思?我尝试将 .py 文档的编码更改为 Unicode,但没有任何效果。
  • @loops -- 好的,我刚刚了解了\U unicode 转义。显然,您通过复制所有反斜杠后跟 U 来避免他的误解。但这会产生一个 OSError 22 无效参数'c:\\users\username\\desktop\\test.py',这很奇怪,因为我只复制了\Users 中的反斜杠。为什么错误显示我复制了所有反斜杠,除了后跟用户名的反斜杠?
  • @Musixauce3000 请post a new question.
  • 如果您收到 SyntaxError: (Unicode error) 'unicodeescape' codec...,请在开头添加一个 'r'... 因此它将是 exec(open(r"C:\\test. py").read()).
【解决方案2】:

如果您想运行脚本并在提示符处结束(以便您可以检查变量等),请使用:

python -i test.py

这将运行脚本,然后将您放入 Python 解释器。

【讨论】:

  • 如果我的脚本不在文件中怎么办?
【解决方案3】:

这取决于test.py 中的内容。下面是一个合适的结构:

# suppose this is your 'test.py' file
def main():
 """This function runs the core of your program"""
 print("running main")

if __name__ == "__main__":
 # if you call this script from the command line (the shell) it will
 # run the 'main' function
 main()

如果你保持这个结构,你可以在命令行中这样运行它(假设$是你的命令行提示符):

$ python test.py
$ # it will print "running main"

如果你想从 Python shell 运行它,那么你只需执行以下操作:

>>> import test
>>> test.main() # this calls the main part of your program

如果您已经在使用 Python,则无需使用 subprocess 模块。相反,请尝试以可以从命令行和 Python 解释器运行的方式构建 Python 文件。

【讨论】:

    【解决方案4】:

    对于较新版本的python:

    exec(open(filename).read())
    

    【讨论】:

      【解决方案5】:

      如果你想避免每次都写这些,你可以定义一个函数:

      def run(filename):
          exec(open(filename).read())
      

      然后调用它

      run('filename.py')
      

      【讨论】:

      • 这不适用于我的用例,因为它不导入变量。我不太确定为什么不这样做。
      【解决方案6】:

      从同一个文件夹,你可以:

      import test
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-26
        • 2011-08-02
        • 1970-01-01
        • 1970-01-01
        • 2014-05-03
        • 2014-02-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多