在 C++ 的 ShellExecute 函数中插入(动态)命令字符串
Insert (dynamic) command string in ShellExecute function in C++
使用 C++(在 Windows 10 上),我试图在 cmd.exe 中执行一个命令,该命令执行一个 python 文件,该文件接收另一个文件(csv 格式) .
我想做的就像我在命令行上输入这样的东西一样:
python3 .\plotCSV.py .\filetoplot.csv
或更好的模式:
python3 C:\...\Documents\plotCSV.py C:\...\Documents\filetoplot.csv
为此我使用 ShellExecute
这样的:
ShellExecute(NULL, "open", "C:\Windows\System32\cmd.exe", "/c \"python3 C:\...\Documents\plotCSV.py C:\...\Documents\filetoplot.csv\"", NULL, SW_SHOWDEFAULT);
对于所选的 csv 文件(例如 filetoplot.csv),此方法有效。除此之外,根据我的需要,csv 文件的名称在我的 C++ 程序中每次都会生成和更改,并保存在变量 file_name.c_str()
中。所以,如果我在 ShellExecute 中使用它,我有:
ShellExecute(NULL, "open", "C:\Windows\System32\cmd.exe", "/c \"python3 C:\...\Documents\plotCSV.py C:\...\Documents\file_name.c_str()\"", NULL, SW_SHOWDEFAULT);
但不幸的是(显然)它不起作用,因为确实没有重命名为“file_name.c_str()”的 csv 文件。
我还找到了函数 ShellExecuteEx
并且想重复相同的过程我认为应该像这样使用函数:
SHELLEXECUTEINFO info = {0};
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask = SEE_MASK_NOCLOSEPROCESS;
info.hwnd = NULL;
info.lpVerb = NULL;
info.lpFile = "cmd.exe";
info.lpParameters = ("python3 C:\...\Documents\plotCSV.py C:\...\Documents\file_name.c_str()");
info.lpDirectory = NULL;
info.nShow = SW_SHOW;
info.hInstApp = NULL;
ShellExecuteEx(&info);
但即使在这里它也不起作用(我可能误解了该函数的工作原理)。
希望我已经很好地解释了自己,请就如何在这方面进行进行征求您的意见。
非常感谢
您正在尝试在字符串文字中编写代码。
这在 C++ 中是不可能的!
您需要先创建动态参数字符串,然后将其传递给函数。
std::string
有一个重载的 +
运算符,支持字符串文字 (const char *
)。
std::string param1 = "/c \"python3 C:\...\Documents\plotCSV.py C:\...\Documents\" + file_name + '\"';
ShellExecute(NULL, "open", "C:\Windows\System32\cmd.exe", param1.c_str(), NULL, SW_SHOWDEFAULT);
使用 C++(在 Windows 10 上),我试图在 cmd.exe 中执行一个命令,该命令执行一个 python 文件,该文件接收另一个文件(csv 格式) . 我想做的就像我在命令行上输入这样的东西一样:
python3 .\plotCSV.py .\filetoplot.csv
或更好的模式:
python3 C:\...\Documents\plotCSV.py C:\...\Documents\filetoplot.csv
为此我使用 ShellExecute
这样的:
ShellExecute(NULL, "open", "C:\Windows\System32\cmd.exe", "/c \"python3 C:\...\Documents\plotCSV.py C:\...\Documents\filetoplot.csv\"", NULL, SW_SHOWDEFAULT);
对于所选的 csv 文件(例如 filetoplot.csv),此方法有效。除此之外,根据我的需要,csv 文件的名称在我的 C++ 程序中每次都会生成和更改,并保存在变量 file_name.c_str()
中。所以,如果我在 ShellExecute 中使用它,我有:
ShellExecute(NULL, "open", "C:\Windows\System32\cmd.exe", "/c \"python3 C:\...\Documents\plotCSV.py C:\...\Documents\file_name.c_str()\"", NULL, SW_SHOWDEFAULT);
但不幸的是(显然)它不起作用,因为确实没有重命名为“file_name.c_str()”的 csv 文件。
我还找到了函数 ShellExecuteEx
并且想重复相同的过程我认为应该像这样使用函数:
SHELLEXECUTEINFO info = {0};
info.cbSize = sizeof(SHELLEXECUTEINFO);
info.fMask = SEE_MASK_NOCLOSEPROCESS;
info.hwnd = NULL;
info.lpVerb = NULL;
info.lpFile = "cmd.exe";
info.lpParameters = ("python3 C:\...\Documents\plotCSV.py C:\...\Documents\file_name.c_str()");
info.lpDirectory = NULL;
info.nShow = SW_SHOW;
info.hInstApp = NULL;
ShellExecuteEx(&info);
但即使在这里它也不起作用(我可能误解了该函数的工作原理)。
希望我已经很好地解释了自己,请就如何在这方面进行进行征求您的意见。
非常感谢
您正在尝试在字符串文字中编写代码。
这在 C++ 中是不可能的!
您需要先创建动态参数字符串,然后将其传递给函数。
std::string
有一个重载的 +
运算符,支持字符串文字 (const char *
)。
std::string param1 = "/c \"python3 C:\...\Documents\plotCSV.py C:\...\Documents\" + file_name + '\"';
ShellExecute(NULL, "open", "C:\Windows\System32\cmd.exe", param1.c_str(), NULL, SW_SHOWDEFAULT);