简单但重复格式化/ FileLocationErrors问题

时间:2014-05-13 23:32:12

标签: python formatting shutil os.system

这些是我正在处理的3个脚本,将用于其他各种脚本,第4个脚本是一个示例:

1

import os
data_dir = os.path.expandvars (r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\system32.lnk")

os.system(r"start data_dir")

2

import shutil
import os

data_dir = os.path.expandvars (r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data")

shutil.rmtree(r"data_dir")

3

import os
data_dir = os.path.expandvars (r"C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data\startme.exe")

os.system(r"terminate data_dir")

4

import os
data_dir = os.path.expandvars (r'C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\system32.lnk')

os.remove(data_dir)

我遇到的问题是脚本1和2是说Windows无法找到指定的文件,但在脚本#4中,我使用完全相同的方法来识别项目/文件在该代码中的位置它似乎毫无障碍地工作。

我一直试图在整个早上弄清楚这一点,是的,我已经在这个过程中学到了很多东西,但我感到有点难过为什么我不能让脚本#1和#2工作。

PS。我也有一个不太重要的小问题,在我发布的第3个脚本中说“'terminate'不被识别为内部或外部命令,可操作程序或批处理文件。”

非常感谢任何帮助, 谢谢!

修改,

import subprocess
import os

data_dir = os.path.expandvars ("C:\\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Data\\startme.exe")

subprocess.call(["start", data_dir])

1 个答案:

答案 0 :(得分:1)

您的所有示例中的问题都是您将变量名称data_dir放在带引号的字符串中。 Python没有填写字符串中变量的内容,你似乎期待它,它放置文字文本"data_dir"。由于您没有名为"data_dir"的文件,因此会出现各种例外情况。

案例#2的解决方案非常简单,只需删除引号:

check = shutil.rmtree(data_dir)

对于#1和#3,它有点复杂,因为您需要将目录名称传递给另一个进程。一种选择是使用字符串格式:

os.system("start {}".format(data_dir))

如果data_dir字符串中有空格或其他意外字符,那可能无法正常工作。更安全的方法可能是在字符串中添加引号:

os.system('start "{}"'.format(data_dir))

或者,您可以使用更好的系统来调用外部命令,例如subprocess

import subprocess
subprocess.call(["start", data_dir])

#3表示terminate不是命令的问题与Python无关。我的Windows版本的默认路径中没有terminate命令,并且我不知道该名称的任何命令存在于某个地方。如果您希望系统上有该命令的命令,则可能需要编辑系统路径,或传递完整路径,而不仅仅是程序名称。