首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >需要从另一个python脚本调用采用命令行参数的python脚本

需要从另一个python脚本调用采用命令行参数的python脚本
EN

Stack Overflow用户
提问于 2018-07-10 04:40:40
回答 1查看 378关注 0票数 0

我完全理解我应该在第一次编写正确的脚本,但事实是我有一个脚本,它根据从命令行传递给它的两个值生成一个数据文件-如下所示:

代码语言:javascript
复制
 [sinux1~]: ./sim_gen.py 100 .3

我需要从另一个脚本中调用这个脚本,遍历一系列值。我到处搜索,在浏览完所有的“你不应该”之后,我试着:

代码语言:javascript
复制
 exec(open("./sim_gen.py 100 .3").read())

这似乎行不通。帮助?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-10 04:45:29

让我们将其分解为几个部分:

代码语言:javascript
复制
exec(open("./sim_gen.py 100 .3").read())

这相当于:

代码语言:javascript
复制
f = open("./sim_gen.py 100 .3")
contents = f.read()
exec(contents)

open与您用于读取文本文件或CSV的open相同。您请求在当前目录中创建一个名为"sim_gen.py 100 .3"的文件。你有吗?当然不是。所以open失败了。

正如您已经知道的,最好的解决方案是重写sim_gen.py,这样您就可以import它,调用一个函数并将参数传递给它。

如果做不到这一点,最干净的答案可能就是run the Python script as a subprocess

代码语言:javascript
复制
import subprocess
import sys
subprocess.run([sys.executable, "./sim_gen.py", "100", ".3"])

请注意,这实际上与您在shell中运行脚本时所做的事情相同,因此,如果在那里是OK的,那么在这里几乎肯定是OK的。

如果出于某种原因您确实需要使用exec,那么您需要做一些非常麻烦的事情,并临时更改脚本代码的argv

代码语言:javascript
复制
import sys
_argv = sys.argv
try:
    sys.argv = ["./sim_gen.py", "100", ".3"]
    with open("./sim_gen.py 100 .3"):
        exec(f.read())
finally:
    sys.argv = _argv

尽管实际上,除非运行它的目的是默默地修改您自己的模块的全局变量或类似的东西,否则您(a)几乎可以肯定地说并不真正需要exec,并且(b)希望传递一个显式的globals参数,即使您确实需要它。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51253681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档