Почему компиляция Transcrypt не работает внутри скрипта Python со строкой: os.system ('python -m transcrypt -b -m -n <somePythonFile> .py')?

1

У меня есть файл Python translate2JS.py, который я пытаюсь динамически перевести на JS после написания тела функции Python. Вот этот файл НАСТОЯТЕЛЬНО для иллюстрации проблемы:

def tempFunc():
    for i in range(25):
         navigator.move("right")      

У меня есть.py файл (translate2JS.py) в папке translate2JS. Я выполняю следующее в функции views.py проекта Django:

os.system('ls') #check initial directory
os.chdir('main/static/main/js/translate2JS')
os.system('ls') #check right directory
os.system('python -m transcrypt -b -m -n translate2JS.py')# THIS is creating an empty file but if the command is entered
# in terminal it works as intended...# also, may need to change python to python3.6 when uploading
os.chdir('../../../../../')
os.system('ls') # check right directory

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

// Transcrypt'ed from Python, 2018-10-24 00:01:12
import {AssertionError, AttributeError, BaseException, DeprecationWarning, Exception, IndexError, IterableError, KeyError, NotImplementedError, RuntimeWarning, StopIteration, UserWarning, ValueError, Warning, __JsIterator__, __PyIterator__, __Terminal__, __add__, __and__, __call__, __class__, __envir__, __eq__, __floordiv__, __ge__, __get__, __getcm__, __getitem__, __getslice__, __getsm__, __gt__, __i__, __iadd__, __iand__, __idiv__, __ijsmod__, __ilshift__, __imatmul__, __imod__, __imul__, __in__, __init__, __ior__, __ipow__, __irshift__, __isub__, __ixor__, __jsUsePyNext__, __jsmod__, __k__, __kwargtrans__, __le__, __lshift__, __lt__, __matmul__, __mergefields__, __mergekwargtrans__, __mod__, __mul__, __ne__, __neg__, __nest__, __or__, __pow__, __pragma__, __proxy__, __pyUseJsNext__, __rshift__, __setitem__, __setproperty__, __setslice__, __sort__, __specialattrib__, __sub__, __super__, __t__, __terminal__, __truediv__, __withblock__, __xor__, abs, all, any, assert, bool, bytearray, bytes, callable, chr, copy, deepcopy, delattr, dict, dir, divmod, enumerate, filter, float, getattr, hasattr, input, int, isinstance, issubclass, len, list, map, max, min, object, ord, pow, print, property, py_TypeError, py_iter, py_metatype, py_next, py_reversed, py_typeof, range, repr, round, set, setattr, sorted, str, sum, tuple, zip} from './org.transcrypt.__runtime__.js';
var __name__ = '__main__';

//# sourceMappingURL=translate2JS.map

Теперь, в терминале, если я перехожу в тот же каталог (main/static/main/js/translate2JS) и набираю python -m transcrypt -b -m -n translate2JS.py, он действительно работает, и Файл translate2JS.js выглядит следующим образом:

// Transcrypt'ed from Python, 2018-10-24 00:16:44
import {AssertionError, AttributeError, BaseException, DeprecationWarning, Exception, IndexError, IterableError, KeyError, NotImplementedError, RuntimeWarning, StopIteration, UserWarning, ValueError, Warning, __JsIterator__, __PyIterator__, __Terminal__, __add__, __and__, __call__, __class__, __envir__, __eq__, __floordiv__, __ge__, __get__, __getcm__, __getitem__, __getslice__, __getsm__, __gt__, __i__, __iadd__, __iand__, __idiv__, __ijsmod__, __ilshift__, __imatmul__, __imod__, __imul__, __in__, __init__, __ior__, __ipow__, __irshift__, __isub__, __ixor__, __jsUsePyNext__, __jsmod__, __k__, __kwargtrans__, __le__, __lshift__, __lt__, __matmul__, __mergefields__, __mergekwargtrans__, __mod__, __mul__, __ne__, __neg__, __nest__, __or__, __pow__, __pragma__, __proxy__, __pyUseJsNext__, __rshift__, __setitem__, __setproperty__, __setslice__, __sort__, __specialattrib__, __sub__, __super__, __t__, __terminal__, __truediv__, __withblock__, __xor__, abs, all, any, assert, bool, bytearray, bytes, callable, chr, copy, deepcopy, delattr, dict, dir, divmod, enumerate, filter, float, getattr, hasattr, input, int, isinstance, issubclass, len, list, map, max, min, object, ord, pow, print, property, py_TypeError, py_iter, py_metatype, py_next, py_reversed, py_typeof, range, repr, round, set, setattr, sorted, str, sum, tuple, zip} from './org.transcrypt.__runtime__.js';
var __name__ = '__main__';
export var tempFunc = function () {
    for (var i = 0; i < 25; i++) {
        navigator.move ('right');
    }
};

//# sourceMappingURL=translate2JS.map

Что-то о запуске команды в скрипте Python отключает функции Transcrypt. Кто-нибудь знает, в чем проблема, и если есть способ, я могу это исправить?

Теги:
translation
compilation
transcrypt

1 ответ

0

Я нашел ответ на мой вопрос! Я попытался найти более общие проблемы os.system, а не проблемы с Transcrypt, и я кое-что узнал. Как обсуждалось здесь, os.system - это не способ сделать это. Более новый и более мощный модуль подпроцесса обеспечивает больший контроль над выполнением команд. Так:

добавить строку

import subprocess

и измените следующее:

os.system('python -m transcrypt -b -m -n <fileToTranslate>.py')

чтобы:

subprocess.call('python -m transcrypt -b -m -n <fileToTranslate>.py')

Ещё вопросы

Сообщество Overcoder
Наверх
Меню