无法使用参数运行进程

时间:2019-05-05 06:40:15

标签: python vb.net process.start

程序逻辑

尝试使用Process.Start()和agrument运行python脚本。我正在尝试使用GUI自动化脚本,其中对于每个参数列表,都会生成并运行一个新的python命令。


问题

python进程无法启动。 CMD窗口显示时间很短并关闭。基本上python脚本不会运行。

注意:通过cmd手动运行时,python脚本正常运行。当没有任何参数时(即仅在没有参数的情况下调用python脚本时),也会运行下面的第二次尝试代码。

因此,当我尝试传递参数并调用脚本时,出现错误。

尝试过的解决方案

代码:第一次尝试

For Each common_dir In common_dirs
     ' command for starting python script
     Dim command As String = utils.pyModDir & "Sys_File_Lister.py" & " " & "-d" & " " & "'" & common_dir & "'"
     Try
          'MsgBox(utils.python_Path)
          Process.Start(utils.python_Path, command).WaitForExit()
          Catch ex As Exception
               MsgBox(ex.Message.ToString)
     End Try
Next

代码:第二次尝试

Using proc As New Process()
     ' set the filename for process
     proc.StartInfo.FileName = utils.python_Path
     ' set the arguments for process
     proc.StartInfo.Arguments = """" & command & """"
     MsgBox(proc.StartInfo.Arguments.ToString)
     Try
          ' start the process
          proc.Start()
          ' wait for the process to complete
          proc.WaitForExit()
          ' if error
     Catch ex As Exception
          MsgBox(ex.Message.ToString)
End Using

代码:第三次尝试

这次,我没有直接使用python调用python脚本,而是在 StartInfo.FileName 中调用了 cmd.exe ,并在 StartInfo.Arguments中调用了其他所有内容

这一次将导致找不到文件错误消息。

这是在CMD的参数中传递的格式字符串:Screenshot: Argument String

从上述命令中,还尝试从python路径中删除引号并将其保留在脚本路径中,但存在相同的错误。

Using proc As New Process()
    ' set the filename for process
    proc.StartInfo.FileName = "cmd.exe /K "
    ' set the arguments for process
    proc.StartInfo.Arguments = """" & command & """"
    MsgBox(proc.StartInfo.Arguments.ToString)
    Try
        ' start the process
        proc.Start()
        ' wait for the process to complete
        proc.WaitForExit()
        ' if error
    Catch ex As Exception
        MsgBox(ex.Message.ToString)
    End Try
End Using

帮助:感激任何帮助!

1 个答案:

答案 0 :(得分:0)

由于似乎只有在传递带有参数的python脚本时才出现问题,所以一种快速的补救方法是在文本文件中添加参数,并在python脚本加载时读取它。.

它有效,但不能解决当前问题。但是,这是在我这里适用的辅助解决方案。希望这对某人有帮助。以下是使用的python命令。我从python脚本中删除了参数解析器,而不是从 -d arg 中读取文件中的参数,如下所示:

# check the list_from configuration
list_conf_path = "list_from.txt"
list_conf = ""
if isfile(list_conf_path):
    with open(list_conf_path, 'r') as f:
        list_conf = f.readline()
list_conf = list_conf.replace('"', '')
print(list_conf)

# start the main function
if list_conf != "":
    init(list_conf)
else:
    init("C:\\")

同样,不是精确的解决方案,而是次要的解决方案。