我无法调用位于ubuntu服务器上的exe文件

问题描述 投票:-1回答:1

我可以在Windows系统上调用exe文件,但不能在ubuntu上调用。我不知道是什么错误。 Windows工作正常。

Python版本:

@ Ubuntu的dashseveg:〜/ Folder1 $ Pot3

我的代码:

import subprocess, sys
from subprocess import Popen, PIPE
exe_str = r"\home\dashzeveg\folder\HLR.exe"
parent = subprocess.Popen(exe_str,  stderr=subprocess.PIPE)

错误是:

dashzeveg@ubuntu:~/folder1$ python3 call
Traceback (most recent call last):
  File "call", line 4, in <module>
    parent = subprocess.Popen(exe_str,  stderr=subprocess.PIPE)
  File "/usr/lib/python3.5/subprocess.py", line 947, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.5/subprocess.py", line 1551, in _execute_child
    raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: '\\home\\dashzeveg\\folder\\HLR.exe'
python
1个回答
0
投票

首先检查你的斜线......它们应该是Linux的正斜杠(Windows将与btw一起工作)。

第二...如果在使用子进程模块时没有使用“shell = True”传递命令,那么命令必须作为列表而不是字符串传递(如果命令有多个选项等,则必须将它们分成个别元素)。在你的情况下很容易......你的命令中没有空格,所以它将是一个1元素列表。

既然你正在使用Popen,我假设你想要输出命令?不要忘记将输出解码为()来自二进制字符串的字符串。

这是一个例子:

james@VIII:~/NetBeansProjects/Factorial$ ls
factorial.c  factorial.exe
james@VIII:~/NetBeansProjects/Factorial$ ./factorial.exe 
5
120
james@VIII:~/NetBeansProjects/Factorial$ /home/james/NetBeansProjects/Factorial/factorial.exe 
5
120
james@VIII:~/NetBeansProjects/Factorial$ 
james@VIII:~/NetBeansProjects/Factorial$ python3
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from subprocess import Popen, PIPE
>>> cmd = ["/home/james/NetBeansProjects/Factorial/factorial.exe"]
>>> output = Popen(cmd, stdout=PIPE).communicate()[0].decode()
>>> output
'5\n120\n'
>>> output.strip().split()
['5', '120']

这假设您的exe将真正运行在Linux上。我只是为了清晰和回答你的问题而命名为factorial.exe。通常在Linux上你不会看到一个名为factorial.exe的文件...它只是factorial

如果您确实希望将命令作为字符串传递出于某种原因。你需要shell=True参数:

>>> from subprocess import Popen, PIPE
>>> cmd = "/home/james/NetBeansProjects/Factorial/factorial.exe"
>>> output = Popen(cmd, stdout=PIPE, shell=True).communicate()[0].decode().strip().split()
>>> output
['5', '120']

您也可以使用os模块执行此操作...社区中的某些人不赞成,但我认为更清晰(代码更少):

>>> from os import popen
>>> cmd = "/home/james/NetBeansProjects/Factorial/factorial.exe"
>>> out = [i.strip() for i in popen(cmd)]
>>> out
['5', '120']
© www.soinside.com 2019 - 2024. All rights reserved.