下のクラスが私を狂わせてしまっています。それはforループに固執しています。なぜself.job_idsの最後の要素にアクセスしないのか分かりません。これはうまくいくはずです。なぜこのforループがクラス内で動作しないのですか?クラス外では完全に動作します。forループがリストのすべての要素にアクセスしていないpython
輸入サブプロセス
class job_runner():
def __init__(self, user_id='staffner'):
self.job_ids = ['12054807', '12054808', '12054809', '12054810', '12054811', '12054812', '12054813', '10', '100']
self.user_id = user_id
def update_running_jobs(self):
'''
() ->
Remove job ids from self.job_ids which completed
'''
# find currently running jobs
curr_running = self.find_running_jobs()
#iterate over self.job_ids and see if they are in the currently running jobs
working_ids = self.job_ids
print 'start working ids:'
print working_ids
for j_id in working_ids:
# for some reason I can not access the last id in the list
print j_id
if j_id not in curr_running:
self.job_ids.remove(j_id)
print 'job_ids'
print self.job_ids
def find_running_jobs(self):
'''
() -> list running ids
Find what job ids are still running on the high performance cluster
'''
proc = subprocess.Popen(['squeue -u %s --Format=arrayjobid'%(self.user_id)], stdout=subprocess.PIPE, shell=True)
out, err = proc.communicate()
if err == None:
out_list = out.replace('ARRAY_JOB_ID', '').replace(' ', '').split('\n')
# filter out any empty strings
out_list = filter(None, out_list)
return out_list
else:
return False
curr_jobs = job_runner()
curr_jobs.update_running_jobs()
はここ(あなたが100にアクセスされることはありません見ることができるように)出力です:
start working ids:
['12054807', '12054808', '12054809', '12054810', '12054811', '12054812', '12054813', '10', '100']
12054807
12054808
12054809
12054810
12054811
12054812
12054813
10
job_ids
['12054807', '12054808', '12054809', '12054810', '12054811', '12054812', '12054813', '100']
私のマシンで正常に動作します – alfasin
1台のマシンでは動作しませんが、別のマシンでは動作する理由はありますか? – Samantha
'find_running_jobs()'呼び出しを削除し、関連するループがコードからすべての項目を表示しますが、完全なコードを実行すると、私のマシンは '100'を出力しますが' 10'を出力しません!!! – Juggernaut