【发布时间】:2016-04-08 05:10:01
【问题描述】:
subprocess 在 Python 中的字符限制为 32,000 个字符左右。我使用子进程打开一个 exe 并向其传递一系列命令,并且正在突飞猛进地清除字符限制。
我的解决方法是将命令字符串一分为二并调用subprocess 两次。我知道我可以按如下方式对字符串进行切片:
commands = '-a 10.162.5.5 399@0000:55:01=0 -a 10.162.5.5 299@0000:55:01=1 -a 10.162.5.5 599@0000:55:01=0 -a 10.162.5.5 699@0000:55:01=0 -a 10.162.5.5 399@0000:55:01=0 -a 10.162.5.5 399@0000:55:01=0 -a 10.162.5.5 499@0000:55:01=1 -a 10.162.5.5 399@0000:55:01=0 -a 10.162.5.5 399@0000:55:01=0 -a 10.162.5.5 399@0000:55:01=0 -a 10.162.5.5 399@0000:55:01=0 -a 10.162.5.5 399@0000:55:01=0 -a 10.162.5.5 799@0000:55:01=34'
print(commands[:len(commands)/2])
print(commands[len(commands)/2:])
不幸的是,每个命令都采用某种格式:-a 10.162.5.5 799@0000:55:01=34
例如,直接拆分是行不通的,因为我可以将单个命令切成两半。
另一个想法是尝试以某种模式拆分字符串:
commands.split(' -')[commands.count('-')/2]
返回序列中的中间完成命令。
【问题讨论】:
-
使用文件。如果您的命令超过 32000 个字符,那么您确实应该执行其他操作。你在调用什么程序?
-
是否将命令保存到一个新的记事本文件中,然后让子进程读取该文件?这是一个自定义的内部程序,我的程序重置了一块具有大量设置的硬件。我为单个板检查了 32,000 多个字符,而被测设备最多可以有 24 个板。
-
子进程只是调用一个外部程序。如果程序清楚地接受命令行参数,但它应该能够从某种文本文件中读取命令。在不了解程序的情况下很难提供准确的解决方案,但如果它需要 600,000+ 个字符,那么它就不是命令行程序!
-
subprocess本身没有限制。对命令行的大小实施任何限制取决于操作系统。正如@Mark 所说,如果您需要在命令行上输入数千个字符,那么您就做错了。调查您的命令是否接受文件中的选项或通过其标准输入等。
标签: python string split subprocess slice