Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Внешний интерпретатор Javascript (https://javascript.ru/forum/misc/11627-vneshnijj-interpretator-javascript.html)

Binom 04.09.2010 00:21

Внешний интерпретатор Javascript
 
День добрый может кто сталкивался с подобным вопросом и сможет проконсультировать или хотя бы направить.

Пример:

Имеется файл a.js
в нем скрипт:

<script language=JavaScript>
i = 0 
while (i <= 5){
 document.write('Шаг № ' + i)
 document.write('<br>')
 i++;
}
  </script>


В командной строке (ОС не важна) запускается внешний интерпретатор с путями к файлу в результате получаем другой файл с содержимым:


Код:

Шаг № 0
Шаг № 1
Шаг № 2
Шаг № 3
Шаг № 4
Шаг № 5


Может кто знает каким образом можно реализовать подобную задачу, заранее спасибо.

Gvozd 04.09.2010 00:30

WSH

with-love-from-siberia 04.09.2010 02:17

Цитата:

Сообщение от Gvozd
WSH

Код:

document.write
Из-за этого не будет работать. Там другие средства ввода/вывода есть. Хотя можно эмулировать. Для кроссплатформенности.

monolithed 04.09.2010 02:41

' VBScript                                                  
Dim FSO, F, ExecuteInfo, ReadString, Counter
Const setRead = 1, setWrite = 2, useDefault = -2
Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
	FSO.CreateTextFile "test.txt"
Set F = FSO.GetFile("test.txt")
Set ExecuteInfo=F.OpenAsTextStream(setWrite, useDefault)
	Counter = 0 
While Counter <= 5
	Counter = Counter +1
	ExecuteInfo.WriteLine "Строка " & Counter
Wend
	ExecuteInfo.Close
Set ExecuteInfo = F.OpenAsTextStream(setRead, useDefault)
	ReadString = ExecuteInfo.ReadLine
	ExecuteInfo.Close


Код на VBScript (WSH).
Сохраняется с расширением .vbs

Binom 04.09.2010 12:26

Цитата:

Сообщение от Gvozd
WSH

Цитата:

Сообщение от with-love-from-siberia
Из-за этого не будет работать. Там другие средства ввода/вывода есть. Хотя можно эмулировать. Для кроссплатформенности.

Цитата:

Сообщение от monolithed
Код на VBScript (WSH).
Сохраняется с расширением .vbs


Может я не корректно поставил вопрос, но смысл в том что бы выполнить именно Javascript (который используется в web проектировании)
Код который я предоставил всего лишь пример и не является прямой задачей которую нужно решить.

Посколку Javascript работает в браузере, может существую командная строка для работы с ними?
Или может существуют интерпретаторы на php или петоне (хотя в данном случае целый пласт функций не будет работать).

with-love-from-siberia 04.09.2010 12:47

Цитата:

Сообщение от Binom
может существую командная строка для работы с ними?

Да существует. Gvozd уже указал на один из них (Windows only):
Цитата:

Сообщение от Gvozd
WSH

Вам надо поискать информацию по этой аббревиатуре. Существуют и другие реализации, например, Rhino, Node.js, V8. Я же добавил, что document.write - это браузерный код вывода. В других реализациях языка функции ввода/вывода другие.

monolithed 04.09.2010 13:03

Я написал в пример, одиного из способов как можн решить вашу проблему.
Этот код написан на VBScript, можно и на JScript, но во всех случаях это будет не кроссплатформенно.

На JScript:

var fso, f, setRead, setWrite = 2, counter = 0;
f = fso.CreateTextFile("c:\\text.txt", true);
fso = new ActiveXObject("Scripting.FileSystemObject");
setRead = fso.OpenTextFile("c:\\text.txt", setWrite, true);
function CreateFile(){
	var fso, useText;
	fso = new ActiveXObject("Scripting.FileSystemObject");
	useText = fso.CreateTextFile("c:\\text.txt", true);
	while(counter<= 5){
		useText.WriteLine("Строка");
	}
	useText.Close();
}



Если вам нужна кроссплатформенность, то как-то так можно

<form name="forma" action="$_SERVER['PHP_SELF']" method="post"> 
	<textarea style="width: 200px; height: 100px" name="text"></textarea>
	<input type="text" value="filename" name="name">
	<input type="submit" value="Ok"> 
	<input type="hidden" name="create" value="Ok"> 
</form>

<script type="text/javascript">
var counter = 0;
while(counter++ <= 5){
	document.forma.text.value += 'строка ' +counter+ '\n';
}
</script>

<?php
if ($create){ 
	$openfile = fopen("$name", "w"); 
	fwrite($openfile, $text); 
	fclose($openfile); 
} 
?>

subzey 04.09.2010 13:36

Вы можете использовать hta (Internet Explorer HTML Application) или виджет Оперы.

В обоих случаях получите stand-alone приложение с js + DOM + BOM.

Разница: эксплорер даст помимо этого вышеупомянутый WSH, да и сделать hta проще простого; Опера - нормальный яваскрипт и кроссплатформенность.

Так или иначе, любым из этих приложений можно получить адрес скрипта из командной стоки и запустить в себе.

with-love-from-siberia 04.09.2010 13:53

Цитата:

Сообщение от subzey
запустить в себе

о-о-ой! =)

Всем
Почему все ваши примеры завязаны на записи в файл? Ведь есть стандартный вывод на консоль. Система умеет перенаправлять его в файл:
Код:

cscript script.js > result.txt

monolithed 04.09.2010 14:25

В чем проблема создать скажем *.bat файл, и прописать путь в переменных средах (для Win), или установить *nginx и использовать Node.js (если уже так хочется JavaScript).
Но выводить данные через консоль лучше на стороне сервера с использованием PHP + SQL


Часовой пояс GMT +3, время: 02:14.