我写了一个定义如下的方法并且工作
HttpServer server = HttpServer.create(new InetSocketAddress(1234), 0);
server.createContext("/favicon.ico", t -> {
byte[] bytes = Files.readAllBytes(Paths.get("/path/to/favicon"));
t.sendResponseHeaders(200, bytes.length);
try (OutputStream os = t.getResponseBody()) {
os.write(bytes);
}
});
server.createContext("/", t -> {
Charset charset = StandardCharsets.UTF_8;
List<String> lines = Files.readAllLines(Paths.get("/path/to/index"), charset);
t.sendResponseHeaders(200, 0);
try (OutputStream os = t.getResponseBody()) {
for (String line : lines) {
os.write((line + "\n").getBytes(charset));
}
}
});
server.start();
我的常量为def cmd_exec(cmd_tokens = []):
p = subprocess.Popen(cmd_tokens,
stdout=subprocess.PIPE,stderr=subprocess.PIPE)
out, err = p.communicate()
return (out, err)
当我以LOAD_IMAGES=['docker', 'load', '-i', 'my_img_file_101']
作为参数执行上述方法时,它可以正常工作。但是,文件名号可能会改变,当我尝试使用通配符时,我收到错误。当我有LOAD_IMAGES
时,我从Py / Bash收到错误LOAD_IMAGES=['docker', 'load', '-i', 'my_img_file*']
如何使外卡工作。直接在bash上执行命令。我的意思是当我在bash上说这个时,它有效open my_img_file*: no such file or directory
答案 0 :(得分:3)
通配符扩展是bash在shell中处理的事情。它不是内置于Linux / Unix中的能够扩展通配符或任何语法的东西。所以你需要明确它并手动进行扩展。
是的另一种选择,它实际上让shell通过shell=True完成所有工作。正如问题所述,它有其缺点。引用:
这是一件好事,请参阅&#34;频繁使用的参数中的警告块&#34;子流程文档的部分。它主要讨论安全问题,但也可以帮助避免愚蠢的编程错误(因为没有魔术shell字符需要担心)
我对shell = True的主要抱怨是它通常意味着有一个更好的方法来解决这个问题 - 在你的例子中,你应该使用glob模块......