[英]How to use python variable in os.system?
我在python中创建了一个小的控制台脚本,我想在其中放入cowsay命令,但是牛说变量的名称,字符串在哪里,而不是变量中的字符串。 我怎么能让牛在变量里面说出字符串?
if (command == 'cow'):
word = raw_input('What does the cow say? ')
os.system('cowsay word')
您可以使用format
来构造字符串
os.system('cowsay {}'.format(word))
或简单的字符串连接
os.system('cowsay ' + word)
但我更喜欢前者,特别是如果字符串变得更复杂。
懒惰的解决方案是简单地连接这个词:
>>> import os
>>> word="moo"
>>> os.system('cowsay ' + word)
_____
< moo >
-----
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
0
但你不应该这样做。 如果用户输入moo; rm -rf /
怎么办? moo; rm -rf /
? 猜猜会发生什么。 此外, word="$(cat /etc/passwd)"
和word="$aliases"
或带有反引号的单词将产生非预期的结果。
您应该使用Subprocess模块 ,它负责转义shell args并构建调用:
>>> import subprocess
>>> subprocess.Popen(['cowsay', word])
<subprocess.Popen object at 0x7fe8c7656c18>
>>> _____
< moo >
-----
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
使用.communicate()
进行简单调用,如文档中所述或下面的示例中所述。 现在您不必担心注射:
>>> word="$(cat /etc/passwd)"
>>> stdout, stderr = subprocess.Popen(
['cowsay', word]).communicate()
____________________
< $(cat /etc/passwd) >
--------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.