Python 由`tempfile.TemporaryDirectory`创建的文件名是否可以在命令行中安全使用?

Python 由`tempfile.TemporaryDirectory`创建的文件名是否可以在命令行中安全使用?,python,operating-system,temporary-files,Python,Operating System,Temporary Files,我有一个调用其他程序序列的python脚本。在这两者之间,会创建一些临时文件作为这些其他程序的输入。为了避免文件系统混乱,我在一个临时目录中创建了所有这些临时文件,该目录由tempfile.TemporaryDirectory创建 当我使用os.system调用其他程序时,命令行必须包含临时目录的名称。我的问题是:我能否确保临时目录的名称只包含“安全”字符(无()/\?*等)?还是我必须以某种方式逃避这个名字 目前,我使用: dir = tempfile.TemporaryDirecto

我有一个调用其他程序序列的python脚本。在这两者之间,会创建一些临时文件作为这些其他程序的输入。为了避免文件系统混乱,我在一个临时目录中创建了所有这些临时文件,该目录由
tempfile.TemporaryDirectory
创建

当我使用
os.system
调用其他程序时,命令行必须包含临时目录的名称。我的问题是:我能否确保临时目录的名称只包含“安全”字符(无
()/\?*
等)?还是我必须以某种方式逃避这个名字

目前,我使用:

    dir = tempfile.TemporaryDirectory()
    dirname = dir.name + "/"
    os.system("lp_solve -S1 " + dirname + "test.lp")

您可以假定tmp目录是systems temp目录,因此它没有特殊字符。。。。也就是说,有人可以在理论上改变它,使之指向任何地方。。。有时系统管理员也会锁定临时目录。。。(仅当他们是混蛋时)@JoranBeasley不要将
tempfile.TemporaryDirectory()
tempfile.gettempdir()
混淆。后者提供操作系统的默认临时目录(在Linux上通常是
/tmp
),而前者创建一个新的临时目录(通常是带有“随机名称”的
/tmp
子目录)。但是您有一点:如果sys admin做了一些有趣的事情,那么基本目录本身可能包含一些有趣的字符。如果您担心“不好的字符”(名称将适合文件系统),那么,与其构建字符串并使用
os.system
,不如使用
subprocess.call来缓解您的担忧(['lp_solve','-S1',dirname+'test.lp'])
-这将允许在适当的时候调用参数的自动转义-这就是您有效地问的吗?@JonClements可能。子流程调用(['lp_solve','-S1',A test.lp'])会是什么do?它会在文件
A test.lp
上调用
lp\u solve
?@jarauh我想这与键入
lp\u solve-S1“A test.lp”相同
在您的shell中-文档很好地说明了该行为。您可以假设tmp目录是系统临时目录,因此它没有特殊字符……这意味着理论上有人可以将其更改为指向任何地方……有时系统管理员也会锁定临时目录……(仅当他们是混蛋时)@JoranBeasley不要将
tempfile.TemporaryDirectory()
tempfile.gettempdir()
混淆。后者给出了操作系统的默认临时目录(在Linux上通常是
/tmp
),而前者创建了一个新的临时目录(通常是带有“随机名称”的
/tmp
的子目录)但是你有一个观点:如果sys admin做了一些有趣的事情,那么基目录本身可能包含有趣的字符。如果你担心“不好的字符”(名称将适合文件系统),那么,与其构建字符串并使用
os.system
,不如使用
subprocess.call来缓解你的担忧(['lp_solve','-S1',dirname+'test.lp'])
-这将允许在适当的时候调用参数的自动转义-这就是您有效地问的吗?@JonClements可能。子流程调用(['lp_solve','-S1',A test.lp'])会是什么do?它会在文件
A test.lp
上调用
lp\u solve
?@jarauh我想这与在shell中键入
lp\u solve-S1“A test.lp”
是一样的——文档很好地说明了行为。