来自 C (visual studio) 的 CMD 命令

和平9795

所以我想使用visual studio C项目执行我的程序文件文件夹中的python文件。(仅供参考使用exe文件)。我知道系统函数可以执行命令。我想对我的命令说,它转到 appdata 中的 python 文件夹,然后运行我的程序文件夹中的 python 文件。

我尝试了以下方式

char cmd[] = "C:\Users\%user%\AppData\Local\Programs\Python\Python37" "C:\Program Files (x86)\tool\tool.py";
system(cmd);

但它给了我一个错误文件名,目录名不正确。它也是一个应用程序,所以它应该是特定于用户的。如何用实际用户名替换 %user%。

我尝试的第二种方法是将 python 设置为环境变量。然后运行

char cmd[] = "python " "C:\Program Files (x86)\tool\tool.py";

因为程序和文件之间有一个空格。错误说找不到 C:\Program。我怎么说编译器将空间作为目录的一部分?

德威伯利

让我们谈谈。

首先我不认为

char cmd[] = "C:\Users\%user%\AppData\Local\Programs\Python\Python37" "C:\Program Files (x86)\tool\tool.py";

做你认为它做的事情。当您将两个这样的字符串放在一起时,编译器会将其视为一个长字符串,并且“...Python37”和“C:...”之间不会有空格。最好只制作一个字符串并放入空格分隔符。

例如:

char cmd[] = "C:\Users\%user%\AppData\Local\Programs\Python\Python37 C:\Program Files (x86)\tool\tool.py";

下一个问题是 C 字符串将 '\'(反斜杠)字符保留为“转义”字符。这个术语有历史课,但那是另一天。重要的部分是它允许您将字符放入通常无法放入的字符串中。例如制表符 (\t)、换行符 (\n) 等。每当编译器看到“\”时,它就会期待另一个字符来完成“转义序列”。如果你真的想要一个反斜杠,你必须输入两个。

例如:

char cmd[] = "C:\\Users\\%user%\\AppData\\Local\\Programs\\Python\\Python37 C:\\Program Files (x86)\\tool\\tool.py";

接下来,您将使用环境变量扩展“%user%”。我假设这是在您的环境中定义的(它不在我的环境中)。您需要注意环境,并且您可能想要检查事情是否如您预期的那样扩展。一种简单的方法是使用相同的代码但使用不同的 cmd 字符串:

例如:

char cmd[] = "echo %USER% >c:\\mydir\\myoutput";
system(cmd);  

在重定向上放置完整路径以确保它最终到达您期望的位置是很有用的。我再次假设 %USER% 在您的环境中已正确定义。

接下来,您将引用一个包含空格的文件路径。这可能就是您尝试按照自己的方式使用引号的原因,但在这种情况下,这对您没有帮助。system 函数接受一个字符串,并且在大多数情况下并不关心它是什么。您需要一些东西来表明该空间是文件路径的一部分。这是那些反斜杠可以真正帮助您的地方。

例如:

char cmd[] = "C:\\Windows\\system32\\cmd.exe /K dir \"C:\\Program Files (x86)\"";
system(cmd);

这应该会在您的桌面上打开一个 DOS/CMD 窗口,执行“C:\Program Files (x86)”目录,然后让 cmd shell 保持打开状态。有时以这种方式让 shell 保持打开状态可以方便地查看默认 env 是什么。

所以把它放在一起你的程序应该是这样的:

int main() {
char cmd[] = "C:\\Users\\%user%\\AppData\\Local\\Programs\\Python\\Python37 \"C:\\Program Files (x86)\\tool\\tool.py\"";
system(cmd);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章