【发布时间】:2019-04-17 15:50:54
【问题描述】:
错误:
OSError: [Errno 7] 参数列表太长
历史:
在 pvpython (vtk) 上运行脚本;但是在较旧的发行版 pvpython .py 并使用subprocess 在终端中传递参数,如下所示并在 python 上运行,但由于传递的信息很大,遇到上述错误。
有问题的代码是:
import subprocess
command = ("python illustrations.py %s %s %s %s %s %s %s %s %s %s" % (str(post_processing), str(width), str(height), str(len(new_overall_lines)), str(reset_scale), str(str_rose_angle), str(str_damage), str(fname), str(fname1), str("ax=None")))
subprocess.Popen(command, stdout=subprocess.PIPE, shell=True)
argv 6 和 7 都是非常长的字符(882770、879326),因为它们是列表。
另一种解决方案是将列表传递到临时文件中,然后将它们加载到 python 模块中。但我试图节省写入和加载时间。
因此我正在寻找一种在终端中传递大参数的方法,或者如何在两个环境中传递参数,在本例中为 pvpython 和 python。
【问题讨论】:
-
我会将该数据存储在一个文件中并传递文件名
-
升级pvpython不是一个选项吗?
-
忽略 shell=True 并检查你
getconf ARG_MAXarg_max val -
如果你只有一个大列表,你可以让你尝试运行的 Python 程序从
sys.stdin读取并将列表输入。但如果你有多个大列表,我认为没有将它们保存到临时文件并传递这些文件的路径的任何方式。 -
使用
pickle或json保存到文件,然后读取。只需几行代码,也不会花费太多时间。将圣经大小的列表作为命令行参数传递可能不是一个好主意。
标签: python python-2.7 subprocess argv pvpython