社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  pycharm

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

leonardo • 2 年前 • 1384 次点击  

我有一个脚本名为 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
 
1384 次点击  
文章 [ 16 ]  |  最新文章 2 年前
Faraaz Kurawle
Reply   •   1 楼
Faraaz Kurawle    3 年前

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

# 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    4 年前

使用 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    5 年前

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

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

if condition:
       import recommend

技术不同,但有效!

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

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

Dharman ANDgineer
Reply   •   5 楼
Dharman ANDgineer    4 年前

将其添加到python脚本中。

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

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

thedz
Reply   •   6 楼
thedz    15 年前

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

测试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    15 年前

如果你想要测试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    3 年前

一个使用子流程的示例。

from subprocess import run

import sys

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

Benyamin Jafari
Reply   •   9 楼
Benyamin Jafari    3 年前

这是一个例子 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    5 年前

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

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

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

Alex Mapley
Reply   •   11 楼
Alex Mapley    8 年前
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    8 年前

另一种方式:

文件test1。py:

print "test1.py"

文件服务。py:

import subprocess

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

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

文档: Python 2 , Python 3

Flavio
Reply   •   13 楼
Flavio    5 年前

我更喜欢 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    3 年前

我发现 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    15 年前

通常的方法如下。

测试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    5 年前

在Python2中,使用

execfile("test2.py")

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

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

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

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