subprocess.run
有很多参数,可以解决一些问题,类似要token的程序
比如CPTAC的自动下载问题,
import os,re
import subprocess
class CPATC:
def download(self,linkFile, justprint = 1):
links = open(linkFile).read().strip().split('\n')
ori_reg = re.compile('https://cptc-xfer.uis.georgetown.edu/publicData/')
cptac_cmd = '/public/home/nong/pro/proteogenomics/softs/cptacpublic/cptacpublic.sh'
ok = open('ok.txt').read().strip().split('\n')
ok_add = []
for li in links:
folder = re.sub(ori_reg,'', li)
if folder in ok:
ok_add.append(folder)
continue
up_dir = os.path.dirname(folder)
print(up_dir)
os.system('rm -rf ' + folder)
os.system('mkdir -p ' + up_dir)
cmd = [cptac_cmd, '--accept', 'get', folder]
print(cmd)
if not justprint:
#status = subprocess.run(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd = up_dir )
status = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd = up_dir )
print(folder, status)
if status.returncode == 0:
ok_add.append(folder)
with open('ok.txt', 'w') as f:
f.write('\n'.join(ok_add) + '\n')
if __name__ == '__main__':
import fire
fire.Fire(CPATC)
我的程序有用的话就点个赞吧
参考: https://www.jianshu.com/p/64c04dda1041