对于我的一生,我无法弄清楚这一点。
我有2个使用python构建的应用程序,因此2个项目位于不同的文件夹中,在第一个应用程序中是否有命令要说,例如来自documents / project2 / test2.py的run file2?
我尝试了类似os.system('')和exec()的方法,但这似乎只有在同一文件夹中才能起作用。我如何给命令一个路径,例如documents / project2,然后例如: exec(documents / project2 python test2.py)吗?
简短版本:
当test2在完全不同的文件/项目中时,是否有运行python test2.py的命令?
感谢所有反馈!
答案 0 :(得分:1)
有很多方法可以使用。
如果可以相对于您的项目创建其他Python脚本的路径,则只需导入.py。这将导致脚本“根”级的所有代码都被执行,并使函数以及类型和变量定义可用于导入脚本的脚本。
当然,这仅在您控制所有内容的安装方式和位置时才有效。这是最可取的解决方案,但只能在有限的情况下使用。
import ..other_package.myscript
您可以像其他任何文本文件一样加载Python文件的内容并执行内容。这被认为更可能带来安全风险,但是考虑到Python在正常使用中的解释特性并没有在正常情况下的导入那么糟糕。
方法如下:
with open('/path/to/myscript.py', 'r') as f:
exec(f.read())
请注意,如果您需要将值传递到脚本内的代码或从脚本中传递出去,则在这种情况下可能要使用文件。
我认为这是最不推荐的解决方案,因为它有点不灵活且不太安全,但是绝对很容易设置。
从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())