将文件作为输入从一个 python 传递到另一个

Posted

技术标签:

【中文标题】将文件作为输入从一个 python 传递到另一个【英文标题】:Pass a file as an input from one python to another 【发布时间】:2020-08-27 19:01:57 【问题描述】:

我有两个 python 文件。从file1.py 我想调用file2.py 但参数化。 Shell 等效为:CALL file2.bat Input.txt

我尝试使用:os.system("file2.py Input.txt"),但这是在记事本中打开文本文件。我希望将此文件作为file2.py 中的输入。

file2.py 中,我将传递的参数检查为:print(f"First Argument : sys.argv[0]")

这样做的正确方法是什么?

【问题讨论】:

这能回答你的问题吗? Calling an external command from Python 你需要通过调用 python <filename>.py 来运行 python 文件,你可以在 python subprocess.run(['python', 'file2.py']) 中使用子进程,但是为什么不直接导入其他模块并使用它的所有行为呢? @TenaciousB 在命令 subprocess.run(['python', 'file2.py']) 我可以在哪里提供 file1.txt 作为输入? @fixatd 尝试使用 os.system 但这正在打开记事本。 (不是我所期望的)。尝试使用subprocess.run("file2.py, Input.txt"),但这给了我错误。命令中的任何更正? 您最好在 file2.py 中创建一个与您的 .txt 文件交互的函数或类,然后将该函数或类导入 file1.py 中吗? 【参考方案1】:

尝试使用subprocess:

import subprocess
subprocess.run(['python', 'file2.py', 'input.txt']) # this will be relative to the current directory

这是一种“肮脏”的 IMO 方式。我会亲自导入 file2 并从 file1 模块运行逻辑。

【讨论】:

【参考方案2】:

这里的问题不在于os.system,而是你的操作系统不知道用python打开.py文件。

sys.executable 包含当前运行的 Python 解释器的完整路径。

所以解决办法是:

 os.system(  sys.executable +  " file2.py Input.txt" )

它适用于 python、python3,如果你在你的主目录中并且你输入

 /usr/local/bin/python file1.py

硬编码字符串“python”,如

subprocess.run(['python', ...

不是一个好建议。

【讨论】:

使用子进程作为这个 (***.com/a/89243/12116796) 列出了子进程相对于 os.system 的好处。 是的,但 os.system 不是问题的根本原因。答案必须与问题严格相关; “作为一般建议好”是题外话。

以上是关于将文件作为输入从一个 python 传递到另一个的主要内容,如果未能解决你的问题,请参考以下文章

python如何将可选参数或关键字参数从一个函数传递到另一个函数?

将值从一个 Python 程序传递到另一个程序

Python - 将值从一个数据框传递到另一个查询

Reactjs - 将状态值从一个组件传递到另一个组件

将javascript对象从一个频道传递到另一个频道

将数据从一个表单域传递到另一个表单域