繁体   English   中英

如何在os.system中使用python变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM