在python脚本中与subprocess.run方法一起运行时,mv命令不起作用。但是,它在bash中使用命令行运行

时间:2020-06-28 07:10:44

标签: python-3.x subprocess mv

#!/usr/bin/env python3

import sys
import subprocess

file = open('old.txt')
for line in file:
        line.strip()
        newline = line.replace('jane', 'jdoe')
        source = '~'+line
        dest = '~'+newline
        subprocess.run(['mv', '$(source)', '$(dest)'], shell=True)

file.close()

上面的脚本循环遍历'old.txt'文件中包含的每一行(每一行都是一个路径名),并将单词' jane '替换为单词' jdoe ”。

然后,它调用 subprocess.run()方法,并使用 mv 命令重命名目标“ 目标”文件到源变量“ source ”提供的名称。

'old.txt'文件的内容如下。

/data/jane.doc
/data/jane.csv

顶部的脚本包含在名为 / scripts 的目录中。

/ data / scripts 目录均位于用户的主文件夹目录中。当运行此脚本时,会收到以下消息。

usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory
usage: mv [-f | -i | -n] [-v] source target
       mv [-f | -i | -n] [-v] source ... directory

在其他情况下,我收到诸如“ mv:无法统计'/data/jane.doc'这样的文件或目录” “缺少文件操作数” 的消息

当我按如下所示使用脚本的一些细微变化时,它仍然不起作用:

#!/usr/bin/env python3

import sys
import subprocess

file = open('old.txt')
for line in file:
        line.strip()
        newline = line.replace('jane', 'jdoe')
        source = '~'+line
        dest = '~'+newline
        mv source dest

file.close()

使它起作用的唯一方法是直接使用命令行界面,如下所示:

mv ~/data/jane.doc ~/data/jdoe.doc

0 个答案:

没有答案