gpt4 book ai didi

python - Python subprocess.run无法处理大参数字符串

转载 作者:行者123 更新时间:2023-12-03 01:30:13 26 4
gpt4 key购买 nike

我需要调用一个powershell脚本并捕获其生成的输出。

由于我需要捕获输出,因此我选择使用subprocess.run()

Powershell调用

powershell DeleteResults -resultscsv '1111,2222,3333,4444'

Python(Python 3.5.2::Anaconda 4.1.1(64位))代码
command = "powershell DeleteResults -resultscsv '{}'".format(resultscsv)
output = subprocess.run(command, stdout=subprocess.PIPE).stdout.decode('utf-8')

只要命令的长度小于33K(大约),一切都会正常

但是,当长度超过33K时,subprocess.call()会引发错误
(在powershell方面没有问题,因为直接调用时它工作得很好)
ERROR: [WinError 206] The filename or extension is too long
Traceback (most recent call last):
File "D:\path\to\python\wrapper.py", line 154, in <module>
output = subprocess.run(command, stdout=subprocess.PIPE).stdout.decode('utf-8')
File "D:\Anaconda3\lib\subprocess.py", line 693, in run
with Popen(*popenargs, **kwargs) as process:
File "D:\Anaconda3\lib\subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "D:\Anaconda3\lib\subprocess.py", line 1224, in _execute_child
startupinfo)

任何指针都会有很大帮助。

不确定是否相关-在Windows环境中通过Control-M调用python脚本。

- 编辑 -

添加本节以添加更多详细信息,以响应Alex的回答。

我们没有ps脚本 DeleteResults。因此,我们无法对其进行修改。我们只是食用它。

就像今天一样
  • 结果csv(80K个字符)存储在results.ini文件
  • 一小段ps内联代码解析.ini文件,然后调用DeleteResults。注意:在外部powershell调用(下面的调用)中有powershell调用。
  • 即使chars> 80K,此方法也可以很好地工作。
  • 但是,我们不希望内联ini解析器成为调用的一部分-看起来很丑。
  • 因此,我们的想法是编写一个python包装器,该包装器将解析.ini文件并调用powershell


  • powershell -NoLogo -NonInteractive -Command "Get-Content 'results.ini' | foreach-object -begin {$h=@{}} -process { $k = [regex]::split($_,'='); if(($k[0].compareTo(' ') -ne 0) -and ($k[0].startswith('[') -ne $True)) {$h.Add($k[0], $k[1]) }}; powershell DeleteResults -resultscsv $h.Get_Item('resultscsv')"

    所以,想知道为什么上面的ps 1-liner没有达到char长度限制吗?是不是 powershell DeleteResults -resultscsv $h.Get_Item('resultscsv')行实际上没有内联扩展-从而未达到char长度限制?

    最佳答案

    有命令行字符串限制,其值取决于操作系统版本。

    无法通过命令行参数传递大数据。而是传递文件名。

    文档和解决方法https://support.microsoft.com/en-us/help/830473/command-prompt-cmd-exe-command-line-string-limitation

    关于python - Python subprocess.run无法处理大参数字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58888088/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com