python - 如何在完全不同的项目中从 .py 文件运行 .py 文件
问题描述
对于我的生活,我无法弄清楚这一点。
我在 python 中构建了 2 个应用程序,因此 2 个项目位于不同的文件夹中,在第一个应用程序中是否有命令要说,例如 run file2 from documents/project2/test2.py ?
我尝试了 os.system('') 和 exec() 之类的东西,但这似乎只有在同一个文件夹中才有效。我怎样才能给命令一个路径,如documents/project2,然后例如: exec(documents/project2 python test2.py) ?
精简版:
当 test2 位于完全不同的文件/项目中时,是否有运行 python test2.py 的命令?
谢谢所有的反馈!
解决方案
有很多方法可以采取。
1 - 导入 .py
如果其他 Python 脚本的路径可以相对于您的项目,您可以简单地导入 .py。这将导致脚本“根”级别的所有代码被执行,并使函数以及类型和变量定义可用于导入它的脚本。
当然,这仅在您控制所有内容的安装方式和位置时才有效。这是最可取的解决方案,但仅在有限的情况下有效。
import ..other_package.myscript
2 - 评估代码
您可以像任何其他文本文件一样加载 Python 文件的内容并执行这些内容。这被认为是更大的安全风险,但考虑到 Python 在正常使用中的解释性质,并不比正常情况下的导入差多少。
就是这样:
with open('/path/to/myscript.py', 'r') as f:
exec(f.read())
请注意,如果您需要将值传递给脚本内部或外部的代码,您可能希望在这种情况下使用文件。
我认为这是最不受欢迎的解决方案,因为它有点不灵活且不是很安全,但它绝对很容易设置。
3 - 像任何其他外部程序一样调用它
从 Python 脚本中,您可以调用任何其他可执行文件,其中包括 Python 本身和另一个脚本。
就是这样:
from subprocess import run
run('python path/to/myscript.py')
这通常是最好的方法。您可以使用命令行与脚本交互,并捕获输出。
您还可以使用 ,直接使用管道输入文本stdin=
或捕获脚本的输出。stdout=
subprocess.Popen
例如,以这个脚本为例,称为quote.py
import sys
text = sys.stdin.read()
print(f'In the words of the poet:\n"{text}"')
这会从标准输入中获取任何文本,并使用一些额外的文本将它们打印到标准输出中,就像任何 Python 脚本一样。你可以这样称呼它:
dir | python quote.py
要从另一个 Python 脚本中使用它:
from subprocess import Popen, PIPE
s_in = b'something to say\nright here\non three lines'
p = Popen(['python', 'quote.py'], stdin=PIPE, stdout=PIPE)
s_out, _ = p.communicate(s_in)
print('Here is what the script produced:\n\n', s_out.decode())
推荐阅读
- amazon-web-services - 在 AWS API Gateway 上使用 SAML 令牌
- javascript - 如何检测在 html 画布中绘制的光盘内的点击?
- java - 如果我在给定端点上全局允许所有请求,如何禁用在方法级别设置的@PreAuthorize 注释?
- authentication - 使用 ADFS 和 SAML 配置 SSO
- r - 在R中交换多列
- reactjs - 如何修复错误:capacitor.config.json 不存在,您是否在项目根目录中设置了电容器?在离子中添加带电容器的电子时?
- json - 使用 Scala 语言的 MongoDB
- c++ - 如何使用 C++ WinForm 中的线程在 2 个不同的图片框中显示网络摄像头
- html - 当我进入 laravel mix 中的混合组件菜单时,所有菜单都被锁定
- javascript - 将对象转换为另一个对象