Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中执行PowerShell行_Python_Windows_Powershell_Arduino - Fatal编程技术网

在python中执行PowerShell行

在python中执行PowerShell行,python,windows,powershell,arduino,Python,Windows,Powershell,Arduino,我正在研究一种摄像机设置,它可以在一些伺服电机上旋转摄像机时跟踪人脸。我想这样做的方式(我可能这样做的方式):我使用python openCV获得人脸位置并生成一个向量,它告诉我们要转向哪个方向,这样相机才能直视人脸。然后,该矢量被发送到Arduino Uno,在那里,输入矢量使用Arduino IDE解码为伺服电机运动。问题是将用python脚本计算的向量发送到Arduino。我使用PowerShell命令通过Windows终端将所述向量发送到COM10: $port= new-Object

我正在研究一种摄像机设置,它可以在一些伺服电机上旋转摄像机时跟踪人脸。我想这样做的方式(我可能这样做的方式):我使用python openCV获得人脸位置并生成一个向量,它告诉我们要转向哪个方向,这样相机才能直视人脸。然后,该矢量被发送到Arduino Uno,在那里,输入矢量使用Arduino IDE解码为伺服电机运动。问题是将用python脚本计算的向量发送到Arduino。我使用PowerShell命令通过Windows终端将所述向量发送到COM10

$port= new-Object System.IO.Ports.SerialPort COM10, 9600, None, 8, one
$port.open()
$port.Writeline(vector)
$port.close()
当我使用python os或子流程命令时,如下所示:

os.system("powershell $port= new-Object System.IO.Ports.SerialPort COM10, 9600, None, 8, one")
os.system("powershell $port.open()")

第一行运行良好,但是我假设的端口变量未保存,第二行出现以下错误:

You cannot call a method on a null-valued expression.
At line:1 char:1
+ $port.open()
+ ~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull
在整个python脚本中,我只需要重复执行一行代码,因为我从摄像头获得了视频的实时反馈:

$port.Writeline(vector)
其他行仅在脚本启动和停止运行时使用

我尝试了许多其他的事情,比如在PowerShell脚本中编写这4行代码并执行它,但我甚至无法让该脚本在我的终端上运行,等等。 这种方法会有效吗?我可以修复它,还是干脆放弃它,使用其他方法?
如果可能的话,我会做错什么呢?

这里的问题似乎是您正在将命令作为子进程运行。运行第一个命令
os.system(“powershell$port=new Object system.IO.Ports.SerialPort COM10,9600,None,8,one”)
后,您就在新进程中定义了
$port
变量,然后该进程退出,不再存在

当您运行
os.system(“powershell$port.open()”
时,您正在创建一个新进程,它不知道
$port
变量曾经存在过

您需要将整个脚本存储在一个单独的文件中,然后立即运行整个脚本。如果您有任何问题,这也将使脚本更容易在以后进行编辑和调试

有关运行脚本的帮助,请参阅

$port.Writeline(vector)