如何使用变量路径,特殊字符和参数启动exe

时间:2010-10-16 19:02:16

标签: python

我想从其中一个文件夹名称根据内部版本号

更改的位置复制安装程序文件
This works for defining the path where the last folder name changes

 import glob
 import os
 dirname = "z:\\zzinstall\\*.install"
 filespec = "setup.exe"
 print glob.glob (os.path.join (dirname, filespec))
 # the print is how I'm verifying the path is correct
 ['z:\\zzinstall\\35115.install\\setup.exe'

我遇到的问题是由于需要参数,我无法启动setup.exe

我需要启动setup.exe,例如

setup.exe /S /z"

还有许多其他参数需要用双引号,斜杠和空格传递。由于提供的文档不一致,我必须通过反复试验进行测试。甚至有些情况下我需要在切换后使用“”!

那我怎么能这样做呢?

理想情况下,我想传递委托路径,包括我需要的文件为glob或

我想用glob作为变量声明路径的结果,然后用setup.exe和arguements连接。那没用,错误列表不能与字符串组合返回。 基本上任何有效的东西,到目前为止我都失败了,因为我无法处理变化的文件名以及争论中空白和特殊字符的淫秽数量。

以下链接与我的具体问题没有明确的答案相关 link text

下面提供的回复不回答问题,也没有提供我提供的链接,这就是我问这个问题的原因。如果我不理解,我会改写。

我有一个文件需要随机复制。该文件前缀有唯一的,不可预测的数字,例如内部版本号。请注意,这是一个Windows系统。 对于这个例子,我将引用相同的文件夹/文件结构。

构建服务器在4小时范围内随时创建构建。构建服务器文件夹的路径是Z:\ data \ builds * .install \ setup.exe

请注意路径中的通配符。这意味着文件夹名称前面加上一个8位数的随机(是,随机)字符串,然后是一个点。然后“安装”。所以,路径一次可能是Z:\ data \ builds \ 12345678.install \ setup.exe或它可能是Z:\ data \ builds \ 66666666.install \ setup.exe这是一个,这个问题的主要部分。注意,我没有设计这个构建编号系统。我作为QA工程师的这些年来从未见过这样的事情。 因此,为了处理我计划使用glob的第一个问题。

import glob 
import os
dirname = "Z:\\data\\builds\\*.install" 
filespec = "setup.exe"
instlpath = glob.glob (os.path.join (dirname, filespec))
print instlpath # this is the test,printsthe accurate path to launch an install, problem #is I have to add arguements

好的,所以我想我可以使用我定义为instlpath的路径,将其连接并执行。

尝试使用prinnt进行测试时

print instlpath + [“/ S / z”]

我明白了 ['Z:\ builds \ install \ 12343333.install \ setup.exe','/ S / z']

我需要 Z:\ builds \ install \ 12343333.install \ setup.exe / S / z“#yes,我需要空格为#well而amy也需要一个z”“

为什么所有安装都称为setup.exe而且没有唯一命名?没有吓人的想法!

谢谢,

Surfdork

1 个答案:

答案 0 :(得分:0)

您链接的相关问题确实包含对您问题的相对明确的答案:

import subprocess
subprocess.call(['z:/zzinstall/35115.install/setup.exe', '/S', '/z', ''])

因此,您不需要连接setup.exe及其参数的路径。您在列表中指定的参数将直接传递给程序,而不会由shell处理。对于在shell命令中为“”的空字符串,请使用空的python字符串。

另见http://docs.python.org/library/subprocess.html#subprocess.call