После загрузки скрипта он ищет внутри своего собственного тега скрипта доступ к его контенту.
Он будет использовать некоторый код, подобный этому:
var scripts = document.getElementsByTagName ( "сценарий"); var data = eval (скрипты [scripts.length - 1] .innerHTML);
Предоставлено John Resig .
http://www.rgagnon.com/javadetails/java-0014.html
import java.io.*;
public class CmdExec {
public static void main(String args[]) {
try {
String line;
Process p = Runtime.getRuntime().exec
(System.getenv("windir") +"\\system32\\"+"tree.com /A");
BufferedReader input =
new BufferedReader
(new InputStreamReader(p.getInputStream()));
while ((line = input.readLine()) != null) {
System.out.println(line);
}
input.close();
}
catch (Exception err) {
err.printStackTrace();
}
}
}
Вы можете получить локальный путь, используя свойства системы или аналогичный подход .
http://download.oracle.com/javase/tutorial/essential/environment/sysprop.html
Библиотека классов Java представляет собой внешние процессы с использованием класса java.lang.Process
. Процессы могут быть созданы с помощью java.lang.ProcessBuilder
:
Process process = new ProcessBuilder("processname").start();
или более старого интерфейса, выставленного перегруженными exec
методами на java.lang.Runtime
class:
Process process = Runtime.getRuntime().exec("processname");
Оба эти фрагмента кода будут порождать новый процесс, который обычно выполняется асинхронно и может взаимодействовать через результирующий объект Process
. Если вам нужно проверить завершение процесса (или дождаться его завершения), не забудьте проверить, что значение выхода (код выхода), возвращаемое process.exitValue()
или process.waitFor()
как ожидалось (0 для большинства программ), поскольку исключение не возникает, если процесс выходит из строя.
Также обратите внимание, что для правильной обработки ввода-вывода процесса часто требуется дополнительный код , как описано в документации для класса Process
(выделено мной):
По умолчанию у созданного подпроцесса нет собственного терминала или консоли. Все его стандартные операции ввода-вывода (т. Е. Stdin, stdout, stderr) будут перенаправлены на родительский процесс, где к ним можно получить доступ через потоки, полученные с помощью методов getOutputStream (), getInputStream () и getErrorStream (). Родительский процесс использует эти потоки для подачи ввода и получения вывода из подпроцесса. Поскольку некоторые собственные платформы обеспечивают ограниченный размер буфера для стандартных потоков ввода и вывода, неспособность быстро записать поток ввода или прочитать выходной поток подпроцесса, может привести к блокировке подпроцесса или даже к взаимоблокировке.
Один из способов убедиться в правильности обработки ввода-вывода и о том, что значение выхода указывает, что успех заключается в использовании библиотеки, такой как
jproc
, которая связана с сложностями захвата stdout и stderr и предлагает простой синхронный интерфейс для запуска внешних процессов:ProcResult result = new ProcBuilder("processname").run();
jproc
доступен через maven central:<dependency> <groupId>org.buildobjects</groupId> <artifactId>jproc</artifactId> <version>2.2.0</version> </dependency>
Вот логика. предположим, что мы хотим запустить калькулятор в окнах с помощью java:
Process p = Runtime.getRuntime().exec(System.getenv("windir") + "\\system32\\" + "calc.exe");
См. Runtime.exec()
и класс Process
. В простейшей форме:
Process myProcess = Runtime.getRuntime().exec(command);
...
Обратите внимание, что вам также необходимо прочитать вывод процесса (например: myProcess.getInputStream()
) - или процесс будет зависать на некоторых системах. Это может быть очень запутанным в первый раз и должно быть включено в любое введение в эти API. См. Ответ Джеймса П. для примера.
Вы также можете посмотреть в новый класс ProcessBuilder
, который упрощает изменение переменных среды и вызывает подпроцессы:
Process myProcess = new ProcessBuilder(command, arg).start();
...
.exec(String[])
метода, а не одну строку.exec(String)
, которая не является процессором командной строки i> - она просто разбивается на пробелы. Они дают тот же результат для этого примераtree.com /A
, но отличаются, если задано, например, имя файла, в котором есть пробелы. – Stephen P 23 September 2010 в 02:05