我正在嘗試使用 運行命令subprocess.check_call(),但從輸出看來,我提供的參數(shù)并未解釋為字符串,而是解釋為字符列表。我試圖運行的命令:7z x test.rar。實際運行的是什么:subprocess.CalledProcessError: Command '['7z', 'x', 't', 'e', 's', 't', '.', 'r', 'a', 'r'] 返回非零退出狀態(tài) 2。出于某種原因,文件名以字符分隔。我錯過了什么?代碼:def main(): parser = argparse.ArgumentParser() parser.add_argument("input", help="File/Folder to extract") args = parser.parse_args() extract_file(args.input)def extract_file(file): extract_cmd = ['7z'] extract_cmd.extend('x') extract_cmd.extend(file) subprocess.check_call(extract_cmd)
2 回答

交互式愛情
TA貢獻1712條經(jīng)驗 獲得超3個贊
列表和字符串的文檔非常準確地涵蓋了這一點。 extend
將新元素放入一個列表中,您從一個包含單個字符串的列表開始。您從未使用過字符串連接運算符。試試這個,而不是:
def extract_file(file_name): extract_cmd = ["7z x " + file_name] subprocess.check_call(extract_cmd)
注意:我更改了您的參數(shù),因為file
是內(nèi)置類型。

HUH函數(shù)
TA貢獻1836條經(jīng)驗 獲得超4個贊
你可以在這里做兩種方法:
subprocess.check_call(['7z', 'x', file])
或者如果您不太擔心 shell 注入并且這是本地代碼,只需傳遞整個字符串:
subprocess.check_call('{} {} {}'.format('7z', 'x', file), shell=True)
其他人已經(jīng)解釋了為什么您會在列表中看到“字符”。擴展將列出您的字符串(在本例中為 file_name)并將其添加到列表的末尾。
a = [11]
a.extend('apples')
print a
輸出:
[11, 'a', 'p', 'p', 'l', 'e', 's']
添加回答
舉報
0/150
提交
取消