如何在Python脚本中更改外部命令的目标目录

时间:2015-10-02 08:11:34

标签: python subprocess

早上好,
我正在编写一个Python脚本来比较两个安装程序。因此我正在使用" sfk" (Swiss File Knife)技术,用于浏览解压缩的目录,包括浏览* .jar文件内部)。
我的脚本如下:

  cmd_sfk1 = "sfk list -hidden -arc -time -size -tofile content_dir1.txt " + lv_inst_dir1
  cmd_sfk2 = "sfk list -hidden -arc -time -size -tofile content_dir2.txt " + lv_inst_dir2

  try:
    subprocess.call(cmd_sfk1)
  except Exception as ex:
    ...

  try:
    subprocess.call(cmd_sfk2)
  except Exception as ex:
    ...

正如您所看到的,结果写在两个文件(content_dir1.txt)和(content_dir2.txt)中,它的想法是简单的文件比较给我两个目录/文件树之间的区别

然而,这不起作用,因为该目录的名称包含在文件中,这里是摘录:

...
2015-09-29 14:04:20          119 Dir1\InstallerData\...\MediaId.properties
2015-09-29 14:00:08          357 Dir1\InstallerData\...\\my.ini
...

" Dir1"在那个文件中弄乱了比较。

我看到一个"简单"解决方案:修改命令的目标目录,如:

  cmd_sfk1 = "sfk list -hidden -arc -time -size -tofile ../content_dir1.txt " + "."
  cmd_sfk2 = "sfk list -hidden -arc -time -size -tofile ../content_dir2.txt " + "."

  try:
    subprocess.call(cmd_sfk1, target_directory=lv_inst_dir1)
  except Exception as ex:
    ...

  try:
    subprocess.call(cmd_sfk2, target_directory=lv_inst_dir2)
  except Exception as ex:
    ...

(有点像" pushd"" popd"在DOS批处理文件中)
目的是最终得到以下content_dir1.txt内容:

...
2015-09-29 14:04:20          119 InstallerData\...\MediaId.properties
2015-09-29 14:00:08          357 InstallerData\...\\my.ini
...

(没有" Dir1")
现在我的问题是:有人知道如何在Python中修改子进程的目标目录吗?

感谢
多米尼克

1 个答案:

答案 0 :(得分:2)

参数为cwd

subprocess.call(cmd_sfk1, cwd=lv_inst_dir1)

subprocess.Popen