如何在完全不同的项目中从.py文件运行.py文件

时间:2020-06-03 23:05:56

标签: python python-3.x python-2.7 pycharm

对于我的一生,我无法弄清楚这一点。

我有2个使用python构建的应用程序,因此2个项目位于不同的文件夹中,在第一个应用程序中是否有命令要说,例如来自documents / project2 / test2.py的run file2?

我尝试了类似os.system('')和exec()的方法,但这似乎只有在同一文件夹中才能起作用。我如何给命令一个路径,例如documents / project2,然后例如: exec(documents / project2 python test2.py)吗?

简短版本:

当test2在完全不同的文件/项目中时,是否有运行python test2.py的命令?

感谢所有反馈!

2 个答案:

答案 0 :(得分:1)

有很多方法可以使用。

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())

答案 1 :(得分:0)

尝试一下:

exec(open("FilePath").read())

如果文件路径正确,它应该可以工作。


Mac示例:

exec(open("/Users/saudalfaris/Desktop/Test.py").read())

Windows示例:

exec(open("C:\Projects\Python\Test.py").read())