我试图使用os.system()来调用另一个接受输入和输出文件的程序.由于文件夹名称较长,我使用的命令约为250个字符.
当我尝试调用命令时,我收到一个错误:The input line is too long
.
我猜是有一个255 character limit
(它使用C系统调用构建,但我也找不到限制).
我试图改变与目录os.chdir()
,以减少文件夹小道长,但是当我尝试使用os.system()
与"..\folder\filename"
它显然不能处理的相对路径名.有没有办法绕过这个限制或让它识别相对路径?
即使使用它也是个好主意subprocess.Popen()
,但这并不能解决问题.
你的问题不是255个字符的限制,这在DOS时间是正确的,后来对于Windows NT/2000增加到2048,并且对于Windows XP +再次增加到8192.
在真正的解决办法是要解决一个很老的bug在Windows的API:_popen()和_wpopen() .
如果您在命令行期间使用引号,则必须在quoates中添加整个命令,否则您将收到The input line is too long
错误消息.
从Windows XP开始的所有Microsoft操作系统都有8192个字符的限制,现在足以用于任何体面的命令行使用但他们忘记解决这个错误.
要克服他们的错误,只需将您的整个命令包含在双引号中,如果您想了解更多关于_popen()的MSDN评论.
小心,因为这些工作:
prog "prog" ""prog" param" ""prog" "param""
但这些不起作用:
""prog param""
如果您需要一个在需要时添加引号的函数,可以从http://github.com/ssbarnea/tendo/blob/master/tendo/tee.py中选择一个.
您应该使用子进程模块.请参阅这个小文档,了解如何重写os.system调用以使用子进程.