如何在 bash 脚本中使用 Python 3.6 解释器?
How to use Python 3.6 interpreter inside a bash script?
我想要一个小脚本,它将找到 运行 并报告文件夹中的所有测试,例如:
#!/bin/bash
coverage run -m unittest discover
coverage report -m
但是,当我 运行 它时,我得到了一些错误,我在 Windows 上没有得到这些错误(比如不带参数使用 super()
)。据我所知,它与以下事实有关,即 Linux 上 Python 的内置和默认版本是 2.x,而我使用的是 3.6。我应该如何更改脚本,以便它使用 Python 3.6 解释器?
编辑:
所以这是我 运行:
测试的文件之一
#!/usr/bin/env python3
import unittest
import random
import math
import sort_functions as s
from comparison_functions import less, greater
class BaseTestCases:
class BaseTest(unittest.TestCase):
sort_func = None
def setUp(self):
self.array_one = [101, -12, 99, 3, 2, 1]
self.array_two = [random.random() for _ in range(100)]
self.array_three = [random.random() for _ in range(500)]
self.result_one = sorted(self.array_one)
self.result_two = sorted(self.array_two)
self.result_three = sorted(self.array_three)
def tearDown(self):
less.calls = 0
greater.calls = 0
def test_sort(self):
result_one = self.sort_func(self.array_one)
result_two = self.sort_func(self.array_two)
result_three = self.sort_func(self.array_three)
self.assertEqual(self.result_one, result_one)
self.assertEqual(self.result_two, result_two)
self.assertEqual(self.result_three, result_three)
# and some more tests here
class TestBubble(BaseTestCases.BaseTest):
def setUp(self):
self.sort_func = s.bubble_sort
super().setUp()
# and some more classes looking like this
错误:
ERROR: test_key (test_sort_func.TestBubble)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/lelik/Desktop/Sorters/test_sort_func.py", line 67, in setUp
super().setUp()
TypeError: super() takes at least 1 argument (0 given)
问题是 Linux 主机上的 coverage
命令已安装用于 Python 2。也就是说,某处存在一个 coverage
脚本,它启动与:
#!/usr/bin/python
在您的系统上,/usr/bin/python
是 python 2.
这里最好的解决方案可能是设置一个 Python 3 virtual environment for running your tests (and then installing coverage
into that virtualenv). You may also want to investigate tox,它将自动为您处理。
首先,为您的 python3 安装它(如果您安装了它并安装了 pip
)
sudo python3 -m pip install coverage
然后,为了运行覆盖python3,运行python3 -m coverage report -m
所以你的最终脚本应该是这样的:
#!/bin/bash
python3 -m coverage run -m unittest discover
python3 -m coverage report -m
您也可以将 python3
替换为 pythons bin 的路径。例如 /usr/bin/python3
。所以你也可以这样称呼它:
#!/bin/bash
/usr/bin/python3 -m coverage run -m unittest discover
/usr/bin/python3 -m coverage report -m
我想要一个小脚本,它将找到 运行 并报告文件夹中的所有测试,例如:
#!/bin/bash
coverage run -m unittest discover
coverage report -m
但是,当我 运行 它时,我得到了一些错误,我在 Windows 上没有得到这些错误(比如不带参数使用 super()
)。据我所知,它与以下事实有关,即 Linux 上 Python 的内置和默认版本是 2.x,而我使用的是 3.6。我应该如何更改脚本,以便它使用 Python 3.6 解释器?
编辑: 所以这是我 运行:
测试的文件之一#!/usr/bin/env python3
import unittest
import random
import math
import sort_functions as s
from comparison_functions import less, greater
class BaseTestCases:
class BaseTest(unittest.TestCase):
sort_func = None
def setUp(self):
self.array_one = [101, -12, 99, 3, 2, 1]
self.array_two = [random.random() for _ in range(100)]
self.array_three = [random.random() for _ in range(500)]
self.result_one = sorted(self.array_one)
self.result_two = sorted(self.array_two)
self.result_three = sorted(self.array_three)
def tearDown(self):
less.calls = 0
greater.calls = 0
def test_sort(self):
result_one = self.sort_func(self.array_one)
result_two = self.sort_func(self.array_two)
result_three = self.sort_func(self.array_three)
self.assertEqual(self.result_one, result_one)
self.assertEqual(self.result_two, result_two)
self.assertEqual(self.result_three, result_three)
# and some more tests here
class TestBubble(BaseTestCases.BaseTest):
def setUp(self):
self.sort_func = s.bubble_sort
super().setUp()
# and some more classes looking like this
错误:
ERROR: test_key (test_sort_func.TestBubble)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/lelik/Desktop/Sorters/test_sort_func.py", line 67, in setUp
super().setUp()
TypeError: super() takes at least 1 argument (0 given)
问题是 Linux 主机上的 coverage
命令已安装用于 Python 2。也就是说,某处存在一个 coverage
脚本,它启动与:
#!/usr/bin/python
在您的系统上,/usr/bin/python
是 python 2.
这里最好的解决方案可能是设置一个 Python 3 virtual environment for running your tests (and then installing coverage
into that virtualenv). You may also want to investigate tox,它将自动为您处理。
首先,为您的 python3 安装它(如果您安装了它并安装了 pip
)
sudo python3 -m pip install coverage
然后,为了运行覆盖python3,运行python3 -m coverage report -m
所以你的最终脚本应该是这样的:
#!/bin/bash
python3 -m coverage run -m unittest discover
python3 -m coverage report -m
您也可以将 python3
替换为 pythons bin 的路径。例如 /usr/bin/python3
。所以你也可以这样称呼它:
#!/bin/bash
/usr/bin/python3 -m coverage run -m unittest discover
/usr/bin/python3 -m coverage report -m