如何使用";中的参数执行python脚本;冷冻;Python二进制文件?

如何使用";中的参数执行python脚本;冷冻;Python二进制文件?,python,Python,我已经构建了一个python二进制文件,其中包含嵌入的冻结模块和一些主脚本。让我们调用二进制pyemb 我想使用其他python脚本中的一些冻结模块-似乎最好的解决方案是从pyemb提供接口,如: pyemb python "somescript.py --arg1 --arg2 arg3" 但是如何在python脚本本身中实现命令python Python函数有exec和execfile两种,但它们不能处理参数和其他命令行内容。您可以使用类似于sys.argv的东西来解析命令行参数 impo

我已经构建了一个python二进制文件,其中包含嵌入的冻结模块和一些主脚本。让我们调用二进制
pyemb

我想使用其他python脚本中的一些冻结模块-似乎最好的解决方案是从
pyemb
提供接口,如:

pyemb python "somescript.py --arg1 --arg2 arg3"
但是如何在python脚本本身中实现命令
python


Python函数有
exec
execfile
两种,但它们不能处理参数和其他命令行内容。

您可以使用类似于
sys.argv
的东西来解析命令行参数

import sys
import subprocess

print sys.argv
if sys.argv[1] == 'python':
    subprocess.Popen([sys.argv[1], sys.argv[2]])
elif sys.argv[1] == 'notepad':
    subprocess.Popen([sys.argv[1], sys.argv[2]])
结果:

>> python scratch.py python argument
['scratch.py', 'python', 'argument']
python: can't open file 'argument': [Errno 2] No such file or directory

>> python scratch.py python "argument argument2"
['scratch.py', 'python', 'argument agument2']
python: can't open file 'argument agument2': [Errno 2] No such file or directory

对于更强大的参数解析,我建议使用类似这样的简单方法:

if sys.argv[1] == 'python':
    sys.argv.pop(1)
    import runpy
    runpy.run_path(sys.argv[1], run_name="__main__")

这个模块非常方便。

它与
pyemb“somescript.py--arg1--arg2 arg3”有何不同?@pacholik它是一个简单的接口sugar-
pyemb
是为了做一些有用的事情而不是运行python脚本,所以
python
只是一个接口命令。那么pyemb不是python解释器?当您键入
pyemb Python
时,它应该运行真正的Python吗?@pacholik它应该模拟或模拟或部分实现真正的Python行为,特别是关于运行带有参数的脚本的部分,正如问题所述。很抱歉,我不明白。在我的python脚本中,你说的是什么意思?什么python脚本?