在许多部分中使用subprocess.check_output和命令行参数很困难

时间:2016-10-23 21:01:03

标签: python subprocess

我有一个命令行工具,我运行如下:

import { Component } from '@angular/core';
import { Invoice } from './invoice.model';
import { InvoiceLineItems } from './invoice-line-item.model';

@Component({
  selector: 'create-invoice',
  templateUrl: 'create-invoice/create-invoice.html'
})
export class CreateInvoiceComponent {
  model: Invoice = new Invoice(
    85,
    'CAD',
    null,
    [ // lineItems
      new InvoiceLineItems('Web development for BAnQ'),
      new InvoiceLineItems('Sept 1 to 3', 14, 910),
      new InvoiceLineItems('Sept 5 to 10', 34, 5293),
      new InvoiceLineItems('Sept 11 to 20', 24, 5293),
      new InvoiceLineItems('Sept 21 to 38', 11, 2493),
    ],
    13989,
    100,
    200,
    15000,
    '',
    null,
    '$'
  );

  getTotal(): number {
    return this.model.lineItems.reduce(
      (a, b): number => a + (isNaN(b.total) ? 0 : b.total),
      0);
  }
}

换句话说,它需要一长串+和-s作为命令行参数,用空格分隔。我试图用Python调用它。在ipython中我做了:

/home/user/Dennis --+-+--+-----+--+++-+-+-- --+-++-+---+--+--++-++++- +--+---++++-+++-++-+-++++ --+-----+---+--++++---++- ----+----++++++-++++---+- ----------++-----++------ +--++-+-++++---+++--+++++ +-+-----++-+++-----+++-++ -++++--+-++--++---++-+++- +--++++-++----+---+--++-+ +++----+--++-+++-+--+++++ -++++-+-++++-+++------+++ -++-++-+--++--+---+-+---+ +-+++---+---++--+++--+--+ ++-+-+--++--+-------+-+-- ---++--+-+--+-+++-+++---- -+---+++-------+++-+----- +-+--------++++++--+-++-+ ++++-+++++++++-----+++++- -+++++-+---+-++---++++--- +-+---+++-+---+-++--++--- +-+-++-++++-+---------+-+ +-+++---++-----+-+--+--++ ++++++-+-++--+----++-+-+- ---+--++--------+++--+---
-5258461839360

我的猜测是造成问题的空间。

如何从命令行获得相同的输出?

1 个答案:

答案 0 :(得分:2)

拆分outstr并将列表中的拆分字符串传递给check_call()。在当前代码中进行更改的最简单方法是将其设为:

from subprocess import check_call

outstr = "--+-+--+-----+--+++-+-+-- --+-++-+---+--+--++-++++- +--+---++++-+++-++-+-++++ --+-----+---+--++++---++- ----+----++++++-++++---+- ----------++-----++------ +--++-+-++++---+++--+++++ +-+-----++-+++-----+++-++ -++++--+-++--++---++-+++- +--++++-++----+---+--++-+ +++----+--++-+++-+--+++++ -++++-+-++++-+++------+++ -++-++-+--++--+---+-+---+ +-+++---+---++--+++--+--+ ++-+-+--++--+-------+-+-- ---++--+-+--+-+++-+++---- -+---+++-------+++-+----- +-+--------++++++--+-++-+ ++++-+++++++++-----+++++- -+++++-+---+-++---++++--- +-+---+++-+---+-++--++--- +-+-++-++++-+---------+-+ +-+++---++-----+-+--+--++ ++++++-+-++--+----++-+-+- ---+--++--------+++--+---"

check_call_args = ["/home/user/Dennis"] + outstr.split(' ')
check_call(check_call_args)

其中str.split(' ')会将您的字符串拆分为由空格' '分隔的子字符串列表。