SausageFingers Ответов: 3

Мне нужна помощь visual basic 2010


Поэтому в моем проекте у меня есть кнопки для выбора действия, которое будет выполнять проект python. Когда я выполняю команду "Пи project.py -l запрос" он показывает только меню справки, что появляется, когда я делаю "py project.py". Я проверил и обнаружил, что мне нужно изменить свой код "psi = New ProcessStartInfo(Setting_Data.Text.Split(" ")(0), Setting_Data.Text.Split(" ")(1))", чтобы разделить текст на большее количество частей, но если я добавлю больше расщеплений, то получу ошибку "разрешение перегрузки не удалось, потому что no accessible 'New принимает такое количество аргументов." Кто-нибудь знает, как это исправить?

Что я уже пробовал:

psi = New ProcessStartInfo(Setting_Data.Text.Split(" ")(0), Setting_Data.Text.Split(" ")(1), Setting_Data.Text.Split(" ")(2))

3 Ответов

Рейтинг:
23

OriginalGriff

Цитата:
в качестве примера того, что я пытаюсь сделать, я выбираю одну из команд, например "py project-l query", и она запускает ее через Cmd.exe-да. Когда я нажимаю кнопку Выполнить команду, она запускает только первые две части команды "py project.py" то, что только загружает скрипт python и не выполняет никаких команд, но мне нужно, чтобы он выполнил полную команду.

Когда вы устанавливаете нам новый StartInfo, он принимает максимум две строки: первая-это имя файла приложения для запуска, а вторая-все параметры, необходимые для работы в качестве одного элемента.

Сплит этого не делает: он разрывает струну на каждый возникновение такого расщепляющего характера.
Итак, ваша входная строка:
py project -l query
Разбивается на четыре отдельные строки:
py 
project 
-l 
query
Вместо того, чтобы использовать сплит, получаем индекс первого пробела, и использовать substring:
Dim cmd As String = "py project -l query"
Dim firstSpace As Integer = cmd.IndexOf(" ")
Dim exe As String = cmd.Substring(0, firstSpace)
Dim param As String = cmd.Substring(firstSpace + 1)
А затем передайте их в свою стартовую информацию:
psi = New ProcessStartInfo(exe, param)


SausageFingers

работать отлично.👍

Рейтинг:
2

SausageFingers

@phil.o, в качестве примера того, что я пытаюсь сделать, я выбираю одну из команд, например "py project-l query", и она запускает ее через Cmd.exe-да. Когда я нажимаю кнопку Выполнить команду, она запускает только первые две части команды "py project.py" то, что только загружает скрипт python и не выполняет никаких команд, но мне нужно, чтобы он выполнил полную команду.

Пример кода по адресу: https://pastebin.com/hDDjSDVh


Richard Deeming

Если вы хотите ответить на решение, нажмите кнопку "есть вопрос или комментарий?" нажмите кнопку под этим решением и добавьте комментарий.

Не опубликуйте свой комментарий как новое "решение" вашего вопроса.

Рейтинг:
0

phil.o

Конструктор ProcessStartInfo (System.Диагностика) | Microsoft Docs[^]

Нет никакого конструктора этого ProcessStartInfo класс, принимающий в качестве параметров более двух строк.
Вам нужно разделить входные данные на два поля: имя исполняемого файла и аргументы командной строки; таким образом, разделение их на пробелы может быть не лучшим способом. Наличие примера входной строки поможет подсказать способ.