当前位置: 首页>>代码示例>>Python>>正文


Python Shell._communicate方法代码示例

本文整理汇总了Python中shell.Shell._communicate方法的典型用法代码示例。如果您正苦于以下问题:Python Shell._communicate方法的具体用法?Python Shell._communicate怎么用?Python Shell._communicate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在shell.Shell的用法示例。


在下文中一共展示了Shell._communicate方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: ShellTestCase

# 需要导入模块: from shell import Shell [as 别名]
# 或者: from shell.Shell import _communicate [as 别名]
class ShellTestCase(unittest.TestCase):
    def setUp(self):
        super(ShellTestCase, self).setUp()
        self.test_dir = os.path.join('/tmp', 'python_shell')
        self.hello_path = os.path.join(self.test_dir, 'hello.txt')
        self.sh = Shell()

        shutil.rmtree(self.test_dir, ignore_errors=True)
        os.makedirs(self.test_dir)

    def tearDown(self):
        shutil.rmtree(self.test_dir)
        super(ShellTestCase, self).tearDown()

    def test_initialization(self):
        sh = Shell()
        self.assertFalse(sh.has_input)
        self.assertTrue(sh.record_output)
        self.assertTrue(sh.record_errors)
        self.assertEqual(sh.last_command, '')
        self.assertEqual(sh.line_breaks, '\n')
        self.assertEqual(sh.code, 0)
        self.assertEqual(sh._popen, None)

        sh = Shell(has_input=True, record_output=False, record_errors=False)
        self.assertTrue(sh.has_input)
        self.assertFalse(sh.record_output)
        self.assertFalse(sh.record_errors)

    def test__split_command(self):
        self.assertEqual(self.sh._split_command('ls'), ['ls'])
        self.assertEqual(self.sh._split_command('ls -alh *.py'), ['ls', '-alh', '*.py'])
        self.assertEqual(self.sh._split_command(['ls', '-alh']), ['ls', '-alh'])

    def test__handle_output_simple(self):
        sh = Shell()
        self.assertEqual(sh._stdout, '')
        self.assertEqual(sh._stderr, '')

        sh._handle_output('another.txt\n', None)
        self.assertEqual(sh._stdout, 'another.txt\n')
        self.assertEqual(sh._stderr, '')

        sh._handle_output('something.txt\n', 'Error: Please supply an arg.\n')
        self.assertEqual(sh._stdout, 'another.txt\nsomething.txt\n')
        self.assertEqual(sh._stderr, 'Error: Please supply an arg.\n')

    def test__handle_output_norecord(self):
        sh = Shell(record_output=False, record_errors=False)
        self.assertEqual(sh._stdout, '')
        self.assertEqual(sh._stderr, '')

        sh._handle_output('another.txt\n', 'Error: Please supply an arg.')
        self.assertEqual(sh._stdout, '')
        self.assertEqual(sh._stderr, '')

    def test__communicate(self):
        def fake_communicate(input=None):
            self.sh._popen.returncode = 1
            return ('whatever\n', 'An error')

        self.assertEqual(self.sh._stdout, '')
        self.assertEqual(self.sh._stderr, '')
        self.assertEqual(self.sh.code, 0)
        self.sh._popen = subprocess.Popen(['ls'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)

        with mock.patch.object(self.sh._popen, 'communicate', fake_communicate) as mock_communicate:
            self.sh._communicate()
            self.assertEqual(self.sh._stdout, 'whatever\n')
            self.assertEqual(self.sh._stderr, 'An error')
            self.assertEqual(self.sh.code, 1)
            self.assertNotEqual(self.sh.pid, 0)

    def test_run(self):
        self.assertFalse(os.path.exists(self.hello_path))

        self.sh.run('touch %s' % self.hello_path)
        self.assertTrue(os.path.exists(self.hello_path))
        self.assertEqual(self.sh.code, 0)

    def test_stdout(self):
        with open(os.path.join(self.test_dir, 'another.txt'), 'w') as another:
            another.write('Whatev.')

        self.sh.run('ls %s' % self.test_dir)
        self.assertEqual(self.sh.code, 0)
        self.assertEqual(self.sh.output(), ['another.txt'])

        # Now with the raw output.
        self.assertEqual(self.sh.output(raw=True), 'another.txt\n')

    def test_stderr(self):
        self.sh.run('ls /there-s-no-way-anyone/has/this/directory/please')
        self.assertEqual(self.sh.code, 1)
        self.assertTrue('No such file' in self.sh.errors()[0])

        # Now with the raw errors.
        self.assertTrue('No such file' in self.sh.errors(raw=True))

    def test_write(self):
#.........这里部分代码省略.........
开发者ID:GiorgosPa,项目名称:shell,代码行数:103,代码来源:tests.py


注:本文中的shell.Shell._communicate方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。