【发布时间】:2015-07-09 23:02:00
【问题描述】:
我有
以下代码:
for src_filename, src_code in src_dict.iteritems():
try:
set.dependencies = subprocess.check_output('unifdef -s /home/c/maindir/folder/' +src_filename, shell=True)
except subprocess.CalledProcessError, e:
print "code is bad" +set.property
set.bad = 1
raise
set.dependencies = list(set(set.dependencies.splitlines()))
我想取消对路径的硬编码 所以我写了以下代码:
filepath = os.path.join(maindirpath, "folder/")
maindir 是这里的参数:/home/c/maindir
path = open(filepath)
set.dependencies = subprocess.check_output("unifdef" '-s' path +src_filename, shell=True)
它会抛出以下错误:
TypeError: cannot concatenate 'str' and 'file' objects
我是 python 新手。任何人都可以帮忙,我哪里出错了?
【问题讨论】:
-
很明显,
src_filename是一个文件对象,而不是文件名,尽管它的名称误导性地声称并非如此。 -
另外,
shell=True是邪恶的,因此您的代码存在安全漏洞(看看如果src_filename是"hello $(rm -rf .).txt"会发生什么。 -
顺便说一下,值得注意的是,您展示了您是如何获得
filepath和path,而不是src_filename,这是您实际使用的论点。请在将来检查您的代码是否可以复制和粘贴以重现您所询问的问题,而无需事先设置。另见:sscce.org -
基本上我想保持代码不变,只是想使用'path'而不是硬编码路径。
-
path是一个文件。要获取文件名,请使用path.name,
标签: python