簡體   English   中英

如何重復將參數傳遞給python文件

[英]How to repeatedly pass arguments to a python file

我有一個python腳本,運行如下:

python script.py -n name 

另外,我有一個文件(或說列表),其中包含所有name值,如下所示:

name1
name2
name3
name4
...
...
name1000

所以,我想運行python腳本來傳遞所有這些名稱作為參數。 執行此任務的最愚蠢和最懶惰的方式是我創建了一個shell腳本(我寫了一個python腳本來生成這個內容)說run.sh如下:

python script.py -n name1
python script.py -n name2
python script.py -n name3
python script.py -n name4
........
........
python script.py -n name1000

我將此shell腳本作為sh run.sh

我確信必須有一個更聰明/更優雅的方式來做到這一點。 有小費嗎?

此外,是否可以在每次執行后釋放(清除)python內存

我建議從shell調用時將文件位置(例如'names.txt' )作為參數傳遞給python腳本。 然后在python腳本中,導入名稱並逐個使用它們。

對於第二個問題,如果將script.py的邏輯包裝在一個函數(例如,名為script_function )中,該函數采用參數name ,並為'names.txt'每個name調用script_function(name) ,則應該保持內存使用率。 原因是在script_function創建的所有變量都是該函數調用的本地變量,並在下一個函數調用中刪除/替換以使用下一個名稱。

另一種選擇是awk內置的系統功能,所以:

awk '{ system("python script.py -n "$0) }' filename

嘗試:

cat <file_with_list_of_names_1_per_line> | xargs python script.py -n

應該這樣做,如果不是...嘗試在bash腳本中包裝“python script.py -n”。 簡單的說,假設一個名為“call_my_script.sh”的腳本包含:

#!/bin/bash
python script.py -n $1

,然后你可以用:

cat <file_with_list_of_names_1_per_line> | xargs call_my_script.sh
# this will call/execute "call_my_script.sh name", for each name in the file, 1 at a time

您還可以使用“xargs”的“-P”選項,並行運行多個實例(注意對資源的簡要訪問,比如寫入相同的輸出文件或類似文件,可能會產生奇怪的結果)

.. | xargs -P <n> ...

並行運行腳本的“n”個實例

旁注:也是一個不熟悉“xargs”的重要方面,它會單獨處理每個單詞 ,這意味着如果在一條線上會有2個(或更多)單詞“word1 word2”......那會使它稱“腳本”為2(或更多)次,每個單詞為1。 它可能不是預期的行為,所以值得一提。

考慮到您有一個名稱列表,您可以在shell腳本中執行以下操作

list="name1 name2 name 3 ... name1000"
for i in $list; do
python script.py -n $i
done

暫無
暫無

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

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