Каковы различия между Java jlan.lang.Runtime.exec() и PHP exec()?

Следующее не работает в Java (исключение выдается):

Runtime.getRuntime().exec("cd mydir; myprog");

То же самое отлично работает в PHP:

exec("cd mydir; myprog");

Что именно отличается в реализации Java и почему (на первый взгляд кажется более ограниченным)?

3 ответа

Решение

Команда java exec не использует системный интерпретатор команд. что-то вроде "cd mydir; myprog" зависит от интерпретатора командной строки системы (например, от windows cmdна Linux sh) разделить это на 2 отдельные команды и выполнить каждую из них. Java не вызывает системный интерпретатор команд, так что это не работает. Вам нужно либо вызывать каждую команду отдельно, либо вызывать требуемый интерпретатор самостоятельно как часть командной строки.

Я видел, что у людей бывают такие проблемы, и я уверен, что есть несколько способов, однако большинство людей ответили так: добавьте cmd перед этим.

Runtime.getRuntime().exec("cmd cd mydir; myprog");

Предполагая, что вы используете апплет, а не Java в среде CLI на сервере? Если это так, то ваша среда выполнения Java работает на клиентском компьютере, а не на сервере.

В Java также есть лучший способ обработки нескольких команд, чем точка с запятой. Вместо использования подписи:

Runtime.exec(String)

попробуйте использовать это для каждой из ваших команд:

Runtime.exec(String[])

и сделайте каждый аргумент вашей команды элементом в массиве String.

Другие вопросы по тегам