我正在从Python运行C可执行文件,这个可执行文件有时会出现段错误.当它发生段错误时,子进程模块不会在stdout或stderr中返回任何内容.
示例代码:
import subprocess
proc = subprocess.Popen(['./a.out'], stdin=subprocess.PIPE,
stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = proc.communicate()
print 'out: "%s"' % out
print 'err: "%s"' % err
print proc.returncode
Run Code Online (Sandbox Code Playgroud)
来源a.out是:
int main() {
printf("hello world\n");
int x = 1 / 0;
}
Run Code Online (Sandbox Code Playgroud)
输出./a.out是:
hello world
Floating point exception
Run Code Online (Sandbox Code Playgroud)
Python代码的输出是(在Linux中,python 2.7):
out: ""
err: ""
-8
Run Code Online (Sandbox Code Playgroud)
有没有办法获得可执行文件的输出,即使它崩溃了?
将返回码转换为字符串消息的通用方法也很不错.
我一直在为此绞尽脑汁。我收到错误:
系统 geckodriver 意外退出。状态代码:-11。
我使用的是共享托管 Web 服务器的 Linux 服务器。我在虚拟环境中设置了所有内容。
Python、Selenium 和 Geckodriver 驻留在 Linux Web 服务器上的虚拟环境中。Firefox 驻留在虚拟环境之外
export PATH=$PATH:/path/to/geckodriver
Run Code Online (Sandbox Code Playgroud)
到我的终端以在PATH环境变量中使用 geckodriver 。
下面是我的代码:
#!/home/DIRECTORY/DIRECTORY/DIRECTORY/venv/bin/python
# -*- coding: UTF-8 -*-
import cgitb
import cgi
from selenium import webdriver
from selenium.webdriver import FirefoxOptions
cgitb.enable()
print ("Content-Type: text/html; charset=utf-8\n\n")
path = r'/home/DIRECTORY/DIRECTORY/DIRECTORY/venv/bin/geckodriver'
binary = FirefoxBinary(r'/usr/lib64/firefox')
opts = FirefoxOptions()
opts.add_argument("--headless")
browser = webdriver.Firefox(firefox_options=opts, firefox_binary=binary, executable_path=path)
rowser.get("http://google.com/")
print ("Headless Firefox …Run Code Online (Sandbox Code Playgroud)