Py学习  »  pycharm

如何在PyCharm中按顺序运行代码?

leonardo • 2 年前 • 670 次点击  

我有一个脚本名为 test1.py 它不在模块中。它只有在脚本本身运行时应该执行的代码。没有函数、类、方法等。我有另一个作为服务运行的脚本。我想打电话 测试1。py 来自作为服务运行的脚本。

例如:

文件 测试1。py :

print "I am a test"
print "see! I do nothing productive."

文件 service.py :

# Lots of stuff here
test1.py # do whatever is in test1.py

我知道有一种方法,就是打开文件,读取内容,然后基本上对其进行评估。我想有更好的方法。至少我希望如此。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133621
 
670 次点击  
文章 [ 16 ]  |  最新文章 2 年前
Faraaz Kurawle
Reply   •   1 楼
Faraaz Kurawle    2 年前

根据给定的示例,这是最好的方法:

# test1.py

def foo():
    print("hellow")
# test2.py
from test1 import foo # might be different if in different folder.
foo()

但根据标题,使用 os.startfile("path") 这是最好的方法,因为它很小,而且很有效。这将执行指定的文件。我的python版本是3。x+。

Community fafaro
Reply   •   2 楼
Community fafaro    3 年前

使用 import test1 第一次使用时,它将执行脚本。对于以后的调用,将脚本视为导入的模块,并调用 reload(test1) 方法

什么时候 reload(module) 被执行:

  • Python模块代码被重新编译,并且 模块级代码重新执行 ,定义一组绑定到模块字典中名称的新对象。未调用扩展模块的init函数

简单检查一下 sys.modules 可以用来调用适当的操作。继续将脚本名称作为字符串引用( 'test1' ),使用 ' import ()' 内置的。

import sys
if sys.modules.has_key['test1']:
    reload(sys.modules['test1'])
else:
    __import__('test1')
Ashwin Balani
Reply   •   3 楼
Ashwin Balani    4 年前

这个过程有点不正统,但可以在所有python版本中使用,

假设要执行名为“推荐”的脚本。py'在“如果”条件下,然后使用,

if condition:
       import recommend

技术不同,但有效!

xcrafter_40 Anurag Uniyal
Reply   •   4 楼
xcrafter_40 Anurag Uniyal    6 年前

为什么不直接导入test1呢?每个python脚本都是一个模块。更好的方法是在test1中设置一个函数,例如main/run。py,导入test1并运行test1。main()。也可以执行test1。py作为一个子流程。

Dharman ANDgineer
Reply   •   5 楼
Dharman ANDgineer    3 年前

将其添加到python脚本中。

import os
os.system("exec /path/to/another/script")

这将执行该命令,就像它被输入到shell中一样。

thedz
Reply   •   6 楼
thedz    14 年前

你不应该这样做。相反,要做到:

测试1。py:

 def print_test():
      print "I am a test"
      print "see! I do nothing productive."

服务py

#near the top
from test1 import print_test
#lots of stuff here
print_test()
Michael Schneider
Reply   •   7 楼
Michael Schneider    14 年前

如果你想要测试1。py将保持可执行,其功能与调用内部服务时相同。py,然后做一些类似的事情:

测试1。py

def main():
    print "I am a test"
    print "see! I do nothing productive."

if __name__ == "__main__":
    main()

服务py

import test1
# lots of stuff here
test1.main() # do whatever is in test1.py
Maisum Abbas
Reply   •   8 楼
Maisum Abbas    2 年前

一个使用子流程的示例。

from subprocess import run

import sys

run([sys.executable, 'fullpathofyourfile.py'])

Benyamin Jafari
Reply   •   9 楼
Benyamin Jafari    2 年前

这是一个例子 subprocess 图书馆:

import subprocess

python_version = '3'
path_to_run = './'
py_name = '__main__.py'

# args = [f"python{python_version}", f"{path_to_run}{py_name}"]  # works in python3
args = ["python{}".format(python_version), "{}{}".format(path_to_run, py_name)]

res = subprocess.Popen(args, stdout=subprocess.PIPE)
output, error_ = res.communicate()

if not error_:
    print(output)
else:
    print(error_)
Chao Chen
Reply   •   10 楼
Chao Chen    4 年前

如前所述, runpy 是从当前脚本运行其他脚本或模块的好方法。

顺便说一句,跟踪器或调试器这样做很常见,在这种情况下,直接导入文件或在子流程中运行文件等方法通常不起作用。

它也需要注意使用 exec 运行代码。你必须提供适当的 run_globals 以避免导入错误或其他一些问题。提到 runpy._run_code 详细信息。

Alex Mapley
Reply   •   11 楼
Alex Mapley    7 年前
import os

os.system("python myOtherScript.py arg1 arg2 arg3")  

使用操作系统,你可以直接呼叫你的终端。如果你想更具体一些,你可以把你的输入字符串和局部变量连接起来。

command = 'python myOtherScript.py ' + sys.argv[1] + ' ' + sys.argv[2]
os.system(command)
Jacktose Dick Goodwin
Reply   •   12 楼
Jacktose Dick Goodwin    7 年前

另一种方式:

文件test1。py:

print "test1.py"

文件服务。py:

import subprocess

subprocess.call("test1.py", shell=True)

这种方法的优点是,不必编辑现有的Python脚本即可将其所有代码放入子例程。

文档: Python 2 , Python 3

Flavio
Reply   •   13 楼
Flavio    4 年前

我更喜欢 runpy :

#!/usr/bin/env python
# coding: utf-8

import runpy

runpy.run_path(path_name='script-01.py')
runpy.run_path(path_name='script-02.py')
runpy.run_path(path_name='script-03.py')

Yaroslav Wally
Reply   •   14 楼
Yaroslav Wally    2 年前

我发现 runpy 标准图书馆最方便。为什么?当错误发生时,你必须考虑情况 test1.py 剧本,还有 朗皮 你有能力处理这件事 service.py 密码回溯文本(用于在日志文件中写入错误以供将来调查)和错误对象(用于处理错误取决于其类型):何时使用 subprocess 我无法从中升级错误对象的库 测试1。py 服务py ,只有回溯输出。 此外,与“将test1.py作为模块导入”解决方案相比, 朗皮 更好的原因是您不需要包装 测试1。py 进入 def main(): 作用

以一段代码为例,使用 traceback 要捕获最后一个错误文本的模块:

import traceback
import runpy #https://www.tutorialspoint.com/locating-and-executing-python-modules-runpy

from datetime import datetime


try:
    runpy.run_path("./E4P_PPP_2.py")
except Exception as e:
    print("Error occurred during execution at " + str(datetime.now().date()) + " {}".format(datetime.now().time()))
    print(traceback.format_exc())
    print(e)
ars
Reply   •   15 楼
ars    14 年前

通常的方法如下。

测试1。py

def some_func():
    print 'in test 1, unproductive'

if __name__ == '__main__':
    # test1.py executed as script
    # do something
    some_func()

服务py

import test1

def service_func():
    print 'service func'

if __name__ == '__main__':
    # service.py executed as script
    # do something
    service_func()
    test1.some_func()
Woodsy balpha
Reply   •   16 楼
Woodsy balpha    4 年前

在Python2中,使用

execfile("test2.py")

看到了吗 documentation 对于名称空间的处理,如果在您的案例中很重要的话。

在Python 3中,这是可以使用的(感谢@fantatory)

exec(open("test2.py").read())

然而,你应该考虑使用不同的方法;你的想法(从我看来)看起来不太清楚。