如何在Python中将转义字符串传递给shell脚本

时间:2012-08-21 06:16:57

标签: python

我正在尝试创建一个Python脚本,然后运行shell脚本“js2coffee”将一些javascript转换为coffeescript。

从命令行我可以运行它,然后再次返回coffeescript ......

echo "var myNumber = 100;" | js2coffee

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

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

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

这有时会起作用,但是有些问题与myJavascript中没有正确转义的特殊字符(我认为大多是引号)有关。必须有一种标准的方法来做到这一点。有任何想法吗?谢谢!

2 个答案:

答案 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,它应该是一个字符串或一系列程序参数。提供一系列参数通常是首选,因为它允许模块处理任何所需的转义和引用参数(例如,允许文件名中的空格)