如何同时运行两个需用户输入的Python自动化测试与数据记录程序?
解决多进程运行Python脚本的Unicode转义错误与参数传递问题
首先,你碰到的unicodeescape错误根源很明确:路径里的单反斜杠\被Python当成了转义字符(比如\y会被解析为无效的转义序列)。解决这个问题有三种简单可行的方式:
- 使用原始字符串:在路径字符串前加
r,比如r"C:\your\path\yeswow.py" - 用双反斜杠替代单反斜杠:
"C:\\your\\path\\yeswow.py" - 改用正斜杠:
"C:/your/path/yeswow.py"
然后看你的多进程代码,还有个关键问题:if __name__ == '__main__':不该放在main()函数内部,必须放在模块的顶层位置。Windows系统下,multiprocessing是通过导入模块创建子进程的,如果没有这个顶层判断,子进程会重复执行主程序代码,引发各种异常。
先跑通简单测试案例
我们先写两个极简的测试脚本,模拟需要输入的场景,再用顶层程序统一控制参数传递:
测试脚本1(test_atp.py)
import sys if __name__ == '__main__': # 从命令行接收顶层程序传递的参数 component = sys.argv[1] loop_times = int(sys.argv[2]) output_file = sys.argv[3] print(f"ATP程序启动:组件={component},循环{loop_times}次,输出到{output_file}") # 这里可以替换成你的ATP测试逻辑
测试脚本2(test_thermo.py)
import sys if __name__ == '__main__': component = sys.argv[1] loop_times = int(sys.argv[2]) output_file = sys.argv[3] print(f"热电偶记录程序启动:组件={component},循环{loop_times}次,输出到{output_file}") # 这里可以替换成你的热电偶数据记录逻辑
顶层控制程序
import multiprocessing import subprocess import sys def run_script(script_path, args): # 通过subprocess运行脚本并传递命令行参数 subprocess.run([sys.executable, script_path] + args) def main(): # 顶层程序接收少量核心输入 component_name = input("请输入被测组件名称:") loop_count = input("请输入运行循环次数:") # 自动生成两个程序的输出文件名 atp_output = f"ATP_{component_name}_loop{loop_count}.csv" thermo_output = f"Thermocouple_{component_name}_loop{loop_count}.csv" # 定义要运行的脚本及对应参数 task_list = [ ("test_atp.py", [component_name, loop_count, atp_output]), ("test_thermo.py", [component_name, loop_count, thermo_output]) ] # 启动多进程 processes = [] for script, args in task_list: p = multiprocessing.Process(target=run_script, args=(script, args)) p.start() processes.append(p) # 等待所有进程执行完成 for p in processes: p.join() if __name__ == '__main__': main()
为什么选择命令行传参?
把原有程序改成接收命令行参数后,顶层程序可以直接把生成好的参数传递过去,避免子进程单独弹出输入提示,也彻底解决了你之前遇到的跨函数文件操作冲突问题。如果不想修改原有程序的输入逻辑,也可以用subprocess.Popen的stdin参数直接传递输入内容,但命令行传参是更简洁易维护的方案。
迁移到正式程序的注意事项
- 把测试脚本路径替换成你的ATP和热电偶程序的实际路径,记得用前面说的正确路径写法
- 根据正式程序的需求调整参数列表,确保传递的参数数量、类型完全匹配
- 如果两个程序会操作同一个文件,记得加文件锁或者避免路径冲突,防止数据写入异常
内容的提问来源于stack exchange,提问作者Mikfish
相关产品推荐
相关产品推荐

