You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何同时运行两个需用户输入的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参数直接传递输入内容,但命令行传参是更简洁易维护的方案。

迁移到正式程序的注意事项

  1. 把测试脚本路径替换成你的ATP和热电偶程序的实际路径,记得用前面说的正确路径写法
  2. 根据正式程序的需求调整参数列表,确保传递的参数数量、类型完全匹配
  3. 如果两个程序会操作同一个文件,记得加文件锁或者避免路径冲突,防止数据写入异常

内容的提问来源于stack exchange,提问作者Mikfish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 06:37:14