Невозможно запустить процесс с аргументами - PullRequest
2 голосов
/ 05 мая 2019

Программная логика

Попытка запустить скрипт Python, используя Process.Start () с agrument. Я пытаюсь автоматизировать сценарий с помощью графического интерфейса, где для каждого списка аргументов генерируется и запускается новая команда python.


Задача

Процесс python не запускается. Окно CMD отображается очень короткое время и закрывается. В основном скрипт Python не запускается.

Примечание : скрипт Python работает правильно при запуске вручную через cmd. Также второй проверенный код (ниже) выполняется, когда нет никаких аргументов, т. Е. Когда без аргументов вызывается только скрипт python.

Итак, где-то возникает ошибка, когда я пытаюсь передать аргументы и вызвать скрипт.

Пробные решения

Код: 1-я попытка

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

Код: 2nd Try

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

Код: 3-я попытка

На этот раз, вместо того, чтобы вызывать скрипт python с использованием Python напрямую, я вызвал cmd.exe в StartInfo.FileName и вызвал все остальное в 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 голосов
/ 06 мая 2019

Поскольку существует проблема только при передаче скрипта 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:\\")

Опять не точное решение, а вторичное.

...