无法从python脚本执行命令行参数

时间:2017-05-22 12:50:11

标签: python command-line

我试图通过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)

1 个答案:

答案 0 :(得分:0)

根据您的错误消息,我认为此问题与ALVConsole.exe有关,而不是您的Python脚本。

当您重定向输出时,ALVConsole.exe会尝试对控制台执行某些操作(例如设置光标位置或获取终端的大小),但是会失败。

ALVConsole.exe是否有一个标志,可以将输出修改为机器可读的版本?我无法找到该程序的文档。