我需要从 python 运行一个命令,因此我正在执行以下操作:
os.system('IFS=".";for f in data/* ; do read -ra ADDR <<< "$f"; mv "$f" "data/${ADDR[-1]}"; done;')
但它说:
sh: 1: Syntax error: redirection unexpected
但如果我在 bash 中运行它,它就可以正常工作:
IFS="."
for f in data/*
do
read -ra ADDR <<< "$f"
mv "$f" "data/${ADDR[-1]}"
done;
它运行得很好。我该如何修复它,让它在一行中运行?
答案1
@steeldriver 已经指出了问题所在。你可以用以下方法解决它:
import subprocess
subprocess.run(['bash', '-c', '''
IFS="."
for f in data/*; do
read -ra ADDR <<< "$f"
[[ ${#ADDR[@]} -gt 0 ]] && mv "$f" "data/${ADDR[-1]}"
done
'''])
但此时,你最好用 python 来完成整个操作,而不是调用 bash:类似
for f in os.scandir("data"):
if f.is_file():
addr = f.name.split(".")[-1]
if f.name != addr:
os.rename(f.path, "data/"+addr)
答案2
以下@steeldriver 评论和@glenn jackman 回答:
os.system('/bin/bash -c \'IFS=".";for f in data/* ; do read -ra ADDR <<< "$f"; mv "$f" "data/${ADDR[-1]}"; done; \' ')