簡體   English   中英

如何在python程序中使用shell腳本?

[英]How to use shell script within a python program?

我想在帶有兩個參數的python程序中使用C-shell腳本。

os.system("recall 20170121 ../E725.txt xy 1")

但是我想將其用於堆棧,因此聲明了如下所示的變量,但是當我在腳本中調用它們時,出現錯誤,表明輸入文件不存在。 如何調用變量?

date_ID=(filename[17:25])
fullpath = '../%s' % (filename)
os.system("import_S1_TOPS_modified $date_ID $fullpath vv 1")

Shell不了解Python變量,因為它是一個完全不同的系統。 因此,您不能使用外殼程序的變量替換機制( $date_ID )。 相反,您必須將它們作為Python字符串傳遞:

os.system("import_S1_TOPS_modified %s %s vv 1" % (date_ID, fullpath))

請注意,這段代碼有一個嚴重的問題:如果有人給出; rm -rf /;該怎么辦; rm -rf /; ; rm -rf /; 作為filename 現在,命令將如下所示:

import_S1_TOPS_modified 20181021; rm -rf /; vv 1

這將刪除所有內容。

這就是為什么最好使用subprocess ,它根本不使用外殼程序,並且不易受此類問題的影響:

subprocess.call(['import_S1_TOPS_modified', date_ID, fullpath, 'vv', '1'])

如果必須使用shell,請使用shlex.quote()並添加shell=True

subprocess.call("import_S1_TOPS_modified %s %s vv 1" % (
    shlex.quote(date_ID), shlex.quote(fullpath)),
    shell=True)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM