如果我有一个相当大的文件库,并想要链接它们,我是否创建一个bash脚本然后将其放入python脚本中以获取我需要用于编译的终端行所需的所有文件。我不认为我正确建立它因为没有./test
#!/usr/bin/env python3
import os
import subprocess
file = open("react3dEngine.txt", "r")
fileList=file.readlines()
file.close()
p=subprocess.Popen(["/usr/bin/g++", "-Wall", str(fileList), "-lglut",
"-lGLU", "-lGL", "-stdio=c+11", "-o", "test", 'main.cpp'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
p.communicate()
p=subprocess.Popen(["./test"], stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
p.communicate()
答案 0 :(得分:3)
问题可能发生在OBJC_CLASS_$_CIContext
;你告诉g ++要找一个名为“['foo.c','bar.c']”的文件(列表的字符串化)。你应该有类似以下的东西
str(fileList)
答案 1 :(得分:1)
fileList
是一个列表。在列表上调用str()
会生成包含括号的格式化字符串,例如
>>> fileList = ['a.c', 'b.c', 'c.c']
>>> str(fileList)
"['a.c', 'b.c', 'c.c']"
因此不能作为命令行的一部分工作。
相反,您需要将文件列表中的每个字符串作为参数传递。您还需要删除使用readlines()
读取的文件中可能存在的尾随新行(我不知道您的react3dEngine.txt
文件的格式)。
尝试编码:
with open("react3dEngine.txt") as files:
file_list = [line.strip() for line in files]
p = subprocess.Popen(["/usr/bin/g++", "-Wall"] + file_list + ["-lglut",
"-lGLU", "-lGL", "-std=c+11", "-o", "test", 'main.cpp'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# etc.
strip()
处理输入文件中可能存在的任何前导和尾随空格。