我需要调用一个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脚本。
存在命令行字符串限制,其值取决于操作系统版本。
不可能通过命令行参数传递大数据。