簡體   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