2012-03-17 33 views
2

声明:我是一名Python初学者,但拥有Drupal编程经验。初学者:python subprocess.call拥有数百个参数

我有这样的:

f = ['/path/1.jpg', '/path/2.jpg', '/path/3.jpg'] #less than 1500 files 

,我必须这样做

call(['c:/program files/ABBYY FineReader 10/finereader.exe'] + f) 

,但有一种说法极限(http://stackoverflow.com/questions/2381241/what- is-the-subprocess-popen-max-length-of-the-args-parameter)的32K字符,所以我需要首先删除/ path。我如何继续,让.exe找到文件?

谢谢!

回答

1

您应该将cwd='/path/'添加到您的subprocess.call的参数中。这会将工作目录更改为'/path/'可执行文件(但请注意,它不用于搜索可执行文件,因此仍然为此提供绝对路径)。

然后,假设他们都是在相同的路径,你可以使用:

import os 
f = [os.path.basename(x) for x in f] 
+0

WIM,你真棒!谢谢! – 2012-03-17 05:12:32

0

看来你是在Windows上。在这种情况下,你可以尝试通过finereader.exe本身指定通配符'*.jpg'可能被处理:

check_call(r'c:\path\to\finereader.exe *.jpg', cwd=r'c:\jpg\dir')