从子进程调用时,G++无法解析路径

2024-10-01 19:19:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个小python脚本来自动评估学生的家庭作业。我有一个框架,提交的作业被解压到一个临时文件夹中,我的脚本被调用,临时文件夹的路径作为参数。你知道吗

我的脚本首先复制一些我需要的额外文件,然后尝试编译c++代码,大致如下所示:

compilation_files = " ".join(glob.iglob("*.cpp"))
compilation_call = ["g++", "-std=c++14", compilation_files, "-o " + output_name]
subprocess.call(compilation_call)

g++退出时出现以下错误:

g++: error: tests-main.cpp tests-small1.cpp small1.cpp: No such file or directory
g++: fatal error: no input files

我确信这些文件存在(毕竟glob否则无法找到它们),并且子进程在正确的目录中执行。你知道吗

是我干的

print "ls: ", subprocess.check_output("ls")
print "pwd: ", subprocess.check_output("pwd")
print "files: ", compilation_files

要验证文件是否确实存在,请正确调用这些文件并在正确的目录中运行脚本。你知道吗

---编辑---

我可以通过传递shell=True使脚本工作,但这也意味着手动转义shell的文件名。你知道吗


Tags: 文件目录脚本文件夹outputtestserrorfiles
1条回答
网友
1楼 · 发布于 2024-10-01 19:19:27

嗯,您正在用一系列参数调用一个子进程。第一个是要执行的命令的名称,下面是命令的参数,一次一个。你知道吗

所以你在执行这样的操作:

g++ -std=c++14 "tests-main.cpp tests-small1.cpp small1.cpp" -o xxx

错误表明文件(单数文件而非复数文件"tests-main.cpp tests-small1.cpp small1.cpp"不存在。你知道吗

相反,您应该:

compilation_call = ["g++", "-std=c++14"] + glob.iglob("*.cpp") + [ "-o " + output_name]

使每个单独的文件名位于其自己的参数列表项中。你知道吗

相关问题 更多 >

    热门问题