[英]passing sentence as a argument in subprocess command
我正在另一個腳本中執行python腳本,並想向其傳遞兩個參數
lines = [line.strip('\n') for line in open('que.txt')]
for l in lines:
print 'my sentence : '
print l
#os.system("find_entity.py") //this also does not work
subprocess.call(" python find_entity.py l 1", shell=True) //this works but l does not considered as sentence which was read
正確的方法是什么?
更新:
lines = [line.strip('\n') for line in open('q0.txt')]
for line_num, line in enumerate(lines):
cmd = ["python", "find_entity.py", line]
subprocess.call(cmd, shell=True)
然后去python終端
您可以使用以下一種字符串替換機制:
在您的情況下,它看起來像
subprocess.call("python find_entity.py %s %d" % (line, line_num))
subprocess.call("python find_entity.py {} {}".format(line, line_num))
或模板
或者,如果使用subprocess
庫,則應將參數作為列表傳遞給call
函數:
subprocess.call(["python", "find_entity.py", line, str(line_num)])
查看line
和line_num
變量-它們傳遞時不帶引號,因此它們將按值傳遞。 推薦使用此解決方案,因為它提供了更簡潔明了的代碼並提供了正確的參數處理(例如,空格轉義等)。
但是,如果要對subprocess.call
使用shell=True
標志,則帶有args列表的解決方案將無法代替字符串替換解決方案。 順便說一句, subprocess
和os
提供了所有Shell功能強大的選項:例如腳本管道,擴展用戶主目錄(〜)等。因此,如果要編寫大型而復雜的腳本,則應使用python庫,而不要使用shell=True
。
您需要變量l的內容(我將其重命名為line),而不是字符串文字“ l”
for line_num, line in enumerate(lines):
cmd = ["python",
"find_entity.py",
line,
str(line_num)]
subprocess.call(cmd, shell=True)
如果命令名稱及其參數已經在單獨的變量中,或者已經在列表中,則幾乎永遠不會使用shell=True
。 (這不是違法的,但是其行為是無證的,通常不是想要的。)
cmd = ["python", "find_entity.py", line]
subprocess.call(cmd)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.