Подача команд в WinSCP

У меня есть код Java, который запускает процесс инструмента WinSCP и подключается к машине Unix, а затем вызывает xxxx.exe, расположенный на машине Unix.

Проблема в том, что xxxx.exe принимает параметр типа File. Поэтому мне нужно загрузить это на удаленную машину, а затем передать xxxx.exe.... это не удается, и я пытаюсь избежать временных папок, насколько это возможно.

маленький код

Process p = Runtime.getRuntime().exec("rTool\\WinSCP.com /script=folder\\code.txt < C:\\FILESTOUPLOADS\\upload1.txt" );

Информация для входа входит в code.txt, как это поддерживается WinSCP.com


person Gerard    schedule 22.08.2012    source источник
comment
Каков правильный синтаксис для загрузки файла и передачи его в качестве параметра? т.е. в папке rTool\\WinSCP.com /script=folder\\code.txt ‹ C:\\FILESTUPLOADS\\upload1.txt   -  person Gerard    schedule 22.08.2012
comment
Не будет ли интереснее поискать хороший способ передачи вашего файла на сервер, а не вызывать внешнюю программу?   -  person W. Goeman    schedule 22.08.2012
comment
.exe на Linux-машине??   -  person Amit Deshpande    schedule 22.08.2012
comment
Однострочный вызов Runtime.exec() редко работает. Следуйте рекомендациям статьи, на которую ссылается информация о Runtime.exec. страницу, прежде чем слишком много задаваться вопросом, почему она ломается. Кроме того, используйте ProcessBuilder для 1.5+ и разбейте аргументы на String[]   -  person Andrew Thompson    schedule 22.08.2012


Ответы (2)


перенаправление файла (то есть символ «‹») обрабатывается моим командным процессором, который Runtime.exec() не использует. Как уже упоминалось в комментариях, сначала используйте версию exec String[], чтобы у вас не было проблем с разбором команд. во-вторых, вам нужно вызвать командный процессор для обработки перенаправления файла (например, с помощью «cmd.exe/k») или сделай сам в java.

person jtahlborn    schedule 22.08.2012
comment
спасибо за ваши ответы .. но я все еще хочу, чтобы выполнение выполнялось на удаленной машине. Мне все еще нужно использовать этот внешний инструмент winSCP, потому что он позволяет мне удаленно входить в систему. - person Gerard; 23.08.2012
comment
jtahlborn: Я сделал так, это работает для передачи файла в качестве параметра после передачи файла через сокет. но также мне нужно передать еще один параметр, как синтаксис ProcessBuilder будет в параметре буксировки, один из них - файл, а другой - строка - person Gerard; 23.08.2012
comment
@Gerard - добавить больше элементов в вашу строку []? - person jtahlborn; 23.08.2012

Почему бы не использовать ProcessBuilder для изменения рабочего каталога и установки пути к файлу из этого каталога

общедоступный каталог ProcessBuilder (каталог файлов) Задает рабочий каталог этого построителя процессов. Подпроцессы, впоследствии запущенные методом start() этого объекта, будут использовать его в качестве своего рабочего каталога. Аргумент может быть нулевым - это означает использование рабочего каталога текущего процесса Java, обычно каталога, названного системным свойством user.dir, в качестве рабочего каталога дочернего процесса.

Параметры: directory — новый рабочий каталог. Возвращает: этот построитель процессов.

person Amit Deshpande    schedule 22.08.2012
comment
Как это передает файл на удаленный сервер? - person W. Goeman; 22.08.2012