下面是 shell 命令,它执行很少的变量和文件操作并将最终文件上传到存储库。
使用重复的 os.system() 是一种选择。有没有更简单优雅的方法来解决这个问题?
即使使用os.system()
,我也面临引号问题,并且变量替换会引发错误。
我不想将这些命令用作脚本并执行它:) 任何输入都会非常有帮助,谢谢。
target_folder = tmp_folder+'/tmp'+str(count)
FILE_TYPE = "bundle"
FILE_NAME = "solution"
os.system('''
set +x
file_name_wo_ext="$(cat 'target_folder'/*.yaml| grep -i name | awk '{print $2}' | awk '{print $1}')"
output_folder="/home/'FILE_NAME'/'FILE_TYPE'/${file_name_wo_ext}/"
tar_file_name=$(ls $output_folder | grep tar.gz)
file_path="/home/"+FILE_NAME"/"+FILE_TYPE+"/${file_name_wo_ext}/${tar_file_name}"
mv $file_path "`basename $file_path .tar.gz`.tgz"
wget command to upload the file
''')
错误:
ls: 无法访问 '/home/+FILE_NAME/+FILE_TYPE+/cat': 没有那个文件或目录
ls: 无法访问 '+target_folder/*.yaml|': 没有那个文件或目录
操作系统:Ubuntu 18.04。
Python 中的 shell 脚本的近似值可能是这样的。
请注意,如果name
YAML 中有多个行,或者多个.tar.gz
es...
import glob
import os
def find_filename_wo_ext(target_folder):
for yaml_filename in glob.glob(os.path.join(target_folder, "*.yaml")):
with open(yaml_filename, "r") as yaml_file:
for line in yaml_file:
if "name" in line.lower():
return line.partition(" ")[-1] # might be wrong :)
def main():
tmp_folder = "/tmp"
count = 1
target_folder = os.path.join(tmp_folder, f"tmp{count}")
FILE_TYPE = "bundle"
FILE_NAME = "solution"
file_name_wo_ext = find_filename_wo_ext(target_folder)
output_folder = os.path.join("/home", FILE_TYPE, FILE_NAME, file_name_wo_ext)
tar_file_name = list(
glob.glob(os.path.join(output_folder, "*.tar.gz"))
)[0]
file_path = os.path.join(output_folder, tar_file_name)
os.rename(file_path, os.path.splitext(file_path)[0] + ".tgz")
os.system("wget...")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句