我试图通过python脚本运行命令行参数。脚本触发.exe但它会引发错误System.IO.IOException: The handle is invalid.
。
以下是我的代码:
import os , sys , os.path
from subprocess import call
import subprocess, shlex
def execute(cmd):
"""
Purpose : To execute a command and return exit status
"""
process = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
(result, error) = process.communicate()
rc = process.wait()
if rc != 0:
print "Error: failed to execute command:",cmd
print error
return result
found_alf = r"C:\AniteSAS\ResultData\20170515\Run01\1733200515.alf"
filter_alvf = r"C:\Users\sshaique\Desktop\ALF\AniteLogFilter.alvf"
command = str(r'ALVConsole.exe -e -t -i ' + '\"'+found_alf+'\"' + ' --ffile ' + '\"'+filter_alvf+'\"')
print command
os.chdir('C:\Program Files\Anite\LogViewer\ALV2')
print os.getcwd()
print "This process detail: \n", execute(command)
输出如下:
ALVConsole.exe -e -t -i" C:\ AniteSAS \ ResultData \ 20170515 \ Run01 \ 1733200515.alf" --ffile" C:\ Users \ sshaique \ Desktop \ ALF \ AniteLogFilter.alvf" C:\ Program Files \ Anite \ LogViewer \ ALV2
此流程详情: 错误:执行命令失败:ALVConsole.exe -e -t -i" C:\ AniteSAS \ ResultData \ 20170515 \ Run01 \ 1733200515.alf" --ffile" C:\ Users \ sshaique \ Desktop \ ALF \ AniteLogFilter.alvf"
未处理的异常:System.IO.IOException:句柄无效。
at System.IO .__ Error.WinIOError(Int32 errorCode,String maybeFullPath)
at System.Console.GetBufferInfo(Boolean throwOnNoConsole,Boolean& succeeded)
at ALV.Console.CommandLineParametersHandler.ConsoleWriteLine(String message,Boolean isError)
at ALV.Console.CommandLineParametersHandler.InvokeActions()
在ALV.Console.Program.Main(String [] args)
当我从上面的输出中复制命令行参数并从cmd手动运行时,它可以正常工作。
ALVConsole.exe -e -t -i "C:\AniteSAS\ResultData\20170515\Run01\1733200515.alf" --ffile "C:\Users\sshaique\Desktop\ALF\AniteLogFilter.alvf"
我正在使用Windows 7和Python 2.7.13。请建议克服这个问题。
修改
我也尝试按照下面的代码将命令作为列表s
传递,但问题仍然存在。
command = str(r'ALVConsole.exe -e --csv -i ' + '\"'+found_alf+'\"' + ' --ffile ' + '\"'+filter_alvf+'\"')
s=shlex.split(command)
print s
print "This process detail: \n", execute(s)
答案 0 :(得分:0)
根据您的错误消息,我认为此问题与ALVConsole.exe有关,而不是您的Python脚本。
当您重定向输出时,ALVConsole.exe会尝试对控制台执行某些操作(例如设置光标位置或获取终端的大小),但是会失败。
ALVConsole.exe是否有一个标志,可以将输出修改为机器可读的版本?我无法找到该程序的文档。