2016-10-27 3 views
1

Я выполнения питон скрипт внутри узла с помощью execSync так:Нет такого устройства или адрес: «/ DEV/STDOUT»

execSync('python myScript.py -o "/dev/stdout"'); 

Мой сценарий будет отправить результат в файл, указанный в -o в этот случай /dev/stdout.

Я получаю сообщение об ошибке "Нет такого устройства или адрес: '/ DEV/STDOUT'".

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

Я запускаю Ubuntu 12.04.

+0

ли она интерпретации кавычки в буквальном смысле часть имени файла? Попробуйте удалить двойные кавычки. –

+0

@JohnGordon Я пробовал с и без котировок – Drahcir

+0

Этот [поток] (http://unix.stackexchange.com/q/36403/134816) может быть вам полезен. – CAB

ответ

1

Когда вы запускаете команду в терминале, /dev/stdout перенаправляет на терминал stdout. Когда вы создаете процесс python с помощью execSync, на него нельзя направлять stdout.

Если вы почитаете немного дальше вниз страницы execsync, он описывает, как использовать child process' stdout

+0

Спасибо за ваш ответ, но это не решит проблему. Я уже прочитал это, он описывает, как перенаправить вывод из stdout дочернего процесса в родительский. – Drahcir

+1

@Drahcir Чтобы быть понятным, он создает канал, из которого родитель может читать. Приведенный пример перенаправляет данные, считанные из канала непосредственно в файл, поэтому вам не нужно писать код для этого. Вы можете сделать что-нибудь с этим выходом, в том числе направлять его на 'sys.stdout', который будет являться родительским stdout. Вопрос в том, где вы хотите, чтобы выход был выполнен? – CAB

+0

Я хочу сделать это: 'JSON.parse (execSync ('python ... и т. Д.))' – Drahcir

Смежные вопросы