python - 如何处理 "The input line is too long"错误消息?

标签 python command-line windows-console

我正在尝试使用 os.system() 调用另一个接受输入和输出文件的程序。由于文件夹名称较长,我使用的命令约为 250 个字符。

当我尝试调用该命令时,出现错误:输入行太长

我猜有 255 个字符的限制(它是使用 C 系统调用构建的,但我也找不到限制)。

我尝试使用 os.chdir() 更改目录以减少文件夹路径长度,但是当我尝试使用 os.system() 时” ..\folder\filename" 它显然无法处理相对路径名。有什么方法可以绕过这个限制或让它识别相对路径吗?

最佳答案

即使使用 subprocess.Popen() 是个好主意,但这并不能解决问题。

您的问题不是 255 个字符的限制,在 DOS 时代是这样,后来在 Windows NT/2000 上增加到 2048 个,在 Windows XP+ 上又增加到 8192 个。

真正的解决方案是解决 Windows API 中一个非常古老的错误:_popen() and _wpopen() .

如果您曾经在命令行中使用引号,则必须将整个命令添加到引号中,否则您将收到The input line is too long 错误消息。

从 Windows XP 开始的所有 Microsoft 操作系统都有 8192 个字符的限制,这对于任何正常的命令行使用来说已经足够了,但他们忘记了解决这个错误。

要克服他们的错误,只需将整个命令用双引号括起来,如果您想了解更多真实的 MSDN comment on _popen() .

小心,因为这些有效:

prog
"prog"
""prog" param"
""prog" "param""

但是这些都行不通:

""prog param""

如果您需要一个在需要时添加引号的函数,您可以从 http://github.com/ssbarnea/tendo/blob/master/tendo/tee.py 中获取

关于python - 如何处理 "The input line is too long"错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/682799/

相关文章:

java - "java: No match."是什么意思?

sqlite - 缺少 sqlite3 历史文件

c# - Windows API 代码包

python - 在 pycassa 中找不到 Cassandra 列族

Python删除字符直到字母或数字

python - 在 Python 中注册信号处理程序的正确方法是什么?

ruby - 如何在 Ruby 中执行 Windows CLI 命令?

python - 如何按最大日期时间过滤数据框中的行?

java - 从命令行删除java文件中的特定函数而不进行编辑

java - ./gradlew assemble 在文件明显存在时由于缺少文件而失败