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