Выполнить код внутри пакетного открытого терминала

Я пишу сценарий запуска для процесса kdb (но я не думаю, что тип процесса имеет значение, с таким же успехом может быть и python). Я хочу, чтобы скрипт запускал мой файл q, а затем внутри терминала выполнял строку (например, myfunc[]). Попытка пакетной команды -c дает «Система не может найти указанный файл». Любой совет? Спасибо. Код, который я сейчас пытаюсь:

 cmd /k “q myqfile.q” -c “myfunc[]”

person PythonParka    schedule 23.04.2020    source источник
comment
Может быть, указать полный путь? что-то вроде cmd /k "c:\q\q c:\q\files\myqfile.q -c myfunc[]" Но ваша дополнительная проблема может заключаться в использовании нескольких двойных кавычек. Могу ли я предложить пакетный файл с именем, скажем, runq.cmd с командой "c:\path to q\q" "c:\path to q file\myqfile.q" -c "myfunc[]", тогда вы бы cmd /c "c:\path to runq\runq.cmd". Хотя нужно задаться вопросом, нужна ли вам вообще часть cmd /c.   -  person avery_larry    schedule 23.04.2020
comment
Обратите внимание, что при создании пакетного файла/команды использовать не умные/фигурные кавычки, и , как в вашем вопросе, а стандартные/ прямые, ".   -  person Compo    schedule 23.04.2020


Ответы (3)


cmd /k "copy myqfile.q myqfile_.q & echo myfunc[] >> myqfile_.q & q myqfile_.q & del myqfile_.q"

Я создаю копию myqfile.q, затем добавляю myfunc[] к копии, затем запускаю копию и, наконец, удаляю копию.

person Henrik4    schedule 23.04.2020
comment
Пожалуйста, добавьте некоторое объяснение к вашему ответу, чтобы другие могли извлечь из него уроки. - person Nico Haase; 24.04.2020
comment
Это прекрасно работает... но, как сказал Нико, не могли бы вы добавить какое-то объяснение? Спасибо - person PythonParka; 25.04.2020
comment
@PythonParka Хорошо, я объясню, см. выше. - person Henrik4; 26.04.2020

Я думаю, что здесь имеет значение тот факт, что это q. Я не думаю, что вы можете так передать команду kdb/q. Добавьте это в конец myqfile.q:

myfunc[];
exit 0
person Matt Moore    schedule 23.04.2020
comment
Это то, что я делал изначально, но я хотел бы иметь возможность запустить его, как указано в вопросе, если это возможно. Возможно, вы не можете сделать это с помощью q — я подумал, что это общий способ передачи команд на терминал. Возможно, мне придется вернуться к этому методу - person PythonParka; 23.04.2020

Вы можете сделать это из командной строки, но я не знаю, лучше ли это:

$ cat script.q
a:1;
func:{show a+x};
$ export QHOME=/opt/q && echo 'func[10]' | $QHOME/l64/q script.q
11
$
person terrylynch    schedule 23.04.2020