1

我正在尝试创建一个 Python 脚本,该脚本依次运行 shell 脚本“js2coffee”以将一些 javascript 转换为咖啡脚本。

从命令行我可以运行它,然后再次获取咖啡脚本......

echo "var myNumber = 100;" | js2coffee

我需要做的是使用 Python 中的相同模式。

在Python中,我遇到了这样的事情:

command = "echo '" + myJavscript + "' | js2coffee"
result = os.popen(command).read()

这有时有效,但存在与特殊字符(我认为主要是引号)相关的问题,而myJavascript. 必须有一个标准的方法来做到这一点。有任何想法吗?谢谢!

4

2 回答 2

5

使用进程的输入流向其提供数据,这样您就可以避免使用 shell 并且不需要转义 javascript。此外,您不容易受到shell 注入攻击;

pr = subprocess.Popen(['js2coffee'], 
                      stdin=subprocess.PIPE,  
                      stdout=subprocess.PIPE)
result, stderrdata = pr.communicate('var myNumber = 100;')
于 2012-08-21T07:47:42.547 回答
1

subprocess 模块是要走的路:http: //docs.python.org/library/subprocess.html#frequently-used-arguments

请注意以下几点:

所有调用都需要 args,它应该是一个字符串或一系列程序参数。提供一系列参数通常是首选,因为它允许模块处理任何所需的参数转义和引用(例如,允许文件名中的空格)

于 2012-08-21T07:00:27.383 回答