运行 CMD 中的脚本有效,但是当 运行 在 C# python 脚本中使用 Process.Start() 时失败
Running Script in CMD Works but when ran using Process.Start() in C# python script fails
我有一个 python 脚本,changeDates.py,它在 C# 程序之外成功地 运行s 在 cmd 中启动命令:
python changeDates.py path/to/folder numberOfMonths numberOfWeeks testSetsToCheck
这些参数都是字符串。 numberOfMonths 和 numberOfWeeks 作为字符串传递给 python 脚本,然后在脚本内部转换为 int。
但是如果我要 运行 使用相同的命令:
private void run_CMD(string cmd, string args, bool messageBox)
{
try
{
Console.WriteLine(cmd);
Console.WriteLine(args);
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = cmd;
start.Arguments = args;
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
using (Process process = Process.Start(start))
{
using (StreamReader reader = process.StandardOutput)
{
string result = reader.ReadToEnd();
Console.Write(result);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error while trying to check package dates: \n" + ex);
Logger.Write(Logger.Level.ERROR, "Error while trying to check package dates: \n" + ex);
}
}
脚本启动并输出以下错误:
C:\Users\bblashko\Documents\VisualStudio2012\Projects\Athena_Test_Automation_Fr
amework\Athena_Test_Automation_Framework\scripts\changeDates.py C:\Users\bblashk
o\Documents\VisualStudio2012\Projects\Athena_Test_Automation_Framework\Athena_Te
st_Automation_Framework\Test_Cases 6 1 00100
Traceback (most recent call last):
File "C:\Users\bblashko\Documents\VisualStudio2012\Projects\Athena_Test_Automa
tion_Framework\Athena_Test_Automation_Framework\scripts\changeDates.py", line 51
0, in <module>
allFiles = checkContent(content, subDir, int(sys.argv[2]), int(sys.argv[3]))
File "C:\Users\bblashko\Documents\VisualStudio2012\Projects\Athena_Test_Automa
tion_Framework\Athena_Test_Automation_Framework\scripts\changeDates.py", line 47
, in checkContent
checkXLSX(f, subDir, numberOfMonths, numberOfWeeks)
File "C:\Users\bblashko\Documents\VisualStudio2012\Projects\Athena_Test_Automa
tion_Framework\Athena_Test_Automation_Framework\scripts\changeDates.py", line 85
, in checkXLSX
changeDate = checkXLSXDates(salesStartDate, pubDate, type, todaysDate, check
Date)
File "C:\Users\bblashko\Documents\VisualStudio2012\Projects\Athena_Test_Automa
tion_Framework\Athena_Test_Automation_Framework\scripts\changeDates.py", line 15
7, in checkXLSXDates
if(re.search("(\w\w)/(\w\w)/(\w\w\w\w)", salesStartDate) and re.search("(\w\
w)/(\w\w)/(\w\w\w\w)", pubDate)):
File "C:\Python34\lib\re.py", line 166, in search
return _compile(pattern, flags).search(string)
TypeError: expected string or buffer
为什么 python 中的正则表达式会突然导致错误?
我该如何解决这个问题?
您传递给 re.search
函数的 string
参数是一个 python 模块,当您以这种方式执行 python 代码时,变量 string
没有正确分配!因此,首先,不要使用 python 关键字和内置名称作为变量名,要摆脱这种情况,您需要检查分配 string
的方式在您的代码中!
我有一个 python 脚本,changeDates.py,它在 C# 程序之外成功地 运行s 在 cmd 中启动命令:
python changeDates.py path/to/folder numberOfMonths numberOfWeeks testSetsToCheck
这些参数都是字符串。 numberOfMonths 和 numberOfWeeks 作为字符串传递给 python 脚本,然后在脚本内部转换为 int。
但是如果我要 运行 使用相同的命令:
private void run_CMD(string cmd, string args, bool messageBox)
{
try
{
Console.WriteLine(cmd);
Console.WriteLine(args);
ProcessStartInfo start = new ProcessStartInfo();
start.FileName = cmd;
start.Arguments = args;
start.UseShellExecute = false;
start.RedirectStandardOutput = true;
using (Process process = Process.Start(start))
{
using (StreamReader reader = process.StandardOutput)
{
string result = reader.ReadToEnd();
Console.Write(result);
}
}
}
catch (Exception ex)
{
Console.WriteLine("Error while trying to check package dates: \n" + ex);
Logger.Write(Logger.Level.ERROR, "Error while trying to check package dates: \n" + ex);
}
}
脚本启动并输出以下错误:
C:\Users\bblashko\Documents\VisualStudio2012\Projects\Athena_Test_Automation_Fr
amework\Athena_Test_Automation_Framework\scripts\changeDates.py C:\Users\bblashk
o\Documents\VisualStudio2012\Projects\Athena_Test_Automation_Framework\Athena_Te
st_Automation_Framework\Test_Cases 6 1 00100
Traceback (most recent call last):
File "C:\Users\bblashko\Documents\VisualStudio2012\Projects\Athena_Test_Automa
tion_Framework\Athena_Test_Automation_Framework\scripts\changeDates.py", line 51
0, in <module>
allFiles = checkContent(content, subDir, int(sys.argv[2]), int(sys.argv[3]))
File "C:\Users\bblashko\Documents\VisualStudio2012\Projects\Athena_Test_Automa
tion_Framework\Athena_Test_Automation_Framework\scripts\changeDates.py", line 47
, in checkContent
checkXLSX(f, subDir, numberOfMonths, numberOfWeeks)
File "C:\Users\bblashko\Documents\VisualStudio2012\Projects\Athena_Test_Automa
tion_Framework\Athena_Test_Automation_Framework\scripts\changeDates.py", line 85
, in checkXLSX
changeDate = checkXLSXDates(salesStartDate, pubDate, type, todaysDate, check
Date)
File "C:\Users\bblashko\Documents\VisualStudio2012\Projects\Athena_Test_Automa
tion_Framework\Athena_Test_Automation_Framework\scripts\changeDates.py", line 15
7, in checkXLSXDates
if(re.search("(\w\w)/(\w\w)/(\w\w\w\w)", salesStartDate) and re.search("(\w\
w)/(\w\w)/(\w\w\w\w)", pubDate)):
File "C:\Python34\lib\re.py", line 166, in search
return _compile(pattern, flags).search(string)
TypeError: expected string or buffer
为什么 python 中的正则表达式会突然导致错误? 我该如何解决这个问题?
您传递给 re.search
函数的 string
参数是一个 python 模块,当您以这种方式执行 python 代码时,变量 string
没有正确分配!因此,首先,不要使用 python 关键字和内置名称作为变量名,要摆脱这种情况,您需要检查分配 string
的方式在您的代码中!