我正在尝试创建一个Python脚本,然后运行shell脚本“js2coffee”将一些javascript转换为coffeescript。
从命令行我可以运行它,然后再次返回coffeescript ......
echo "var myNumber = 100;" | js2coffee
我需要做的是使用Python中的相同模式。
在Python中,我遇到过这样的事情:
command = "echo '" + myJavscript + "' | js2coffee"
result = os.popen(command).read()
这有时会起作用,但是有些问题与myJavascript
中没有正确转义的特殊字符(我认为大多是引号)有关。必须有一种标准的方法来做到这一点。有任何想法吗?谢谢!
答案 0 :(得分:5)
使用进程的输入流来提供数据,这样就可以避免使用shell,而无需转义javascript。此外,您不会受到shell injection攻击;
pr = subprocess.Popen(['js2coffee'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE)
result, stderrdata = pr.communicate('var myNumber = 100;')
答案 1 :(得分:1)
子进程模块是要走的路: http://docs.python.org/library/subprocess.html#frequently-used-arguments
请注意以下几点:所有调用都需要args,它应该是一个字符串或一系列程序参数。提供一系列参数通常是首选,因为它允许模块处理任何所需的转义和引用参数(例如,允许文件名中的空格)