Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

invalid call of Windows API _popen() generating The input line is too long error message #53908

Open
ssbarnea mannequin opened this issue Aug 27, 2010 · 9 comments
Open
Assignees
Labels
OS-windows type-bug An unexpected behavior, bug, or error

Comments

@ssbarnea
Copy link
Mannequin

ssbarnea mannequin commented Aug 27, 2010

BPO 9699
Nosy @tjguk, @bitdancer, @ssbarnea
Files
  • bug_line_too_long.py
  • Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.

    Show more details

    GitHub fields:

    assignee = 'https://github.com/tjguk'
    closed_at = None
    created_at = <Date 2010-08-27.11:42:17.599>
    labels = ['type-bug', 'OS-windows']
    title = 'invalid call of Windows API _popen() generating The input\tline is too long error message'
    updated_at = <Date 2019-04-26.19:41:53.020>
    user = 'https://github.com/ssbarnea'

    bugs.python.org fields:

    activity = <Date 2019-04-26.19:41:53.020>
    actor = 'BreamoreBoy'
    assignee = 'tim.golden'
    closed = False
    closed_date = None
    closer = None
    components = ['Windows']
    creation = <Date 2010-08-27.11:42:17.599>
    creator = 'ssbarnea'
    dependencies = []
    files = ['18662']
    hgrepos = []
    issue_num = 9699
    keywords = []
    message_count = 9.0
    messages = ['115062', '115072', '115077', '115083', '115097', '115104', '115110', '116320', '223149']
    nosy_count = 3.0
    nosy_names = ['tim.golden', 'r.david.murray', 'ssbarnea']
    pr_nums = []
    priority = 'normal'
    resolution = None
    stage = None
    status = 'open'
    superseder = None
    type = 'behavior'
    url = 'https://bugs.python.org/issue9699'
    versions = ['Python 2.7', 'Python 3.4', 'Python 3.5']

    @ssbarnea
    Copy link
    Mannequin Author

    ssbarnea mannequin commented Aug 27, 2010

    Behavior: you get "The input line is too long." error message when you try to run an external process by using os.system(), subprocess.Popen() or other similar methods.

    The real command line limit is 8192 under Windows and in most cases (if not all) the cause for getting this message is not the length.

    The real cause is that if you even have a quote inside your command line you need to include the entire command in quote.

    Here are some details:
    http://stackoverflow.com/questions/682799/what-to-do-with-the-input-line-is-too-long-error-message/3583282#3583282
    http://msdn.microsoft.com/en-us/library/96ayss4b.aspx (see comment)

    Even if this is caused by a bug on Windows that is present for more than ten years I think Python needs to workaround it by adding the quotes when they are needed.

    This will prevent other developers from writing OS specific code in their Python programs in order to workaround this bug.

    @ssbarnea ssbarnea mannequin added OS-windows type-bug An unexpected behavior, bug, or error labels Aug 27, 2010
    @bitdancer
    Copy link
    Member

    Python does not call _popen, though it does call cmd.exe (through CreateProcess) when shell=True in subprocess. Can you provide an example that shows this error occurring?

    @ssbarnea
    Copy link
    Mannequin Author

    ssbarnea mannequin commented Aug 27, 2010

    I'm currently building some samples (one that could be run on any Windows machine).

    @ssbarnea
    Copy link
    Mannequin Author

    ssbarnea mannequin commented Aug 27, 2010

    Here is a test file. It does contain 3 command lines that are similar but one of them is not working (cmd_2).

    @bitdancer
    Copy link
    Member

    Thanks, sorin. This issue is at least affected by the fix to bpo-2304. I don't currently have an up-to-date version of 2.7 trunk on my windows VM, so I can't test your code there. (Note that 'import tee' needs to be removed before your test program will run.) Adding Tim and Brian to nosy so they can check it out. It is quite possible (even likely) that 2304 fixed this problem as well.

    @ssbarnea
    Copy link
    Mannequin Author

    ssbarnea mannequin commented Aug 27, 2010

    True about tee, I forgot to remove it. By the way, in case the other patch does not solve the issue we can use the quote_command() from
    http://github.com/ssbarnea/tendo/blob/master/tendo/tee.py to solve it.

    @tjguk tjguk self-assigned this Aug 27, 2010
    @tjguk
    Copy link
    Member

    tjguk commented Aug 27, 2010

    I'll pick this up and try to decide what's best to
    do. I'm away from home for a few weeks and have only
    intermittent internet access. Thanks, Sorin, for
    a reproducible test case.

    @tjguk tjguk changed the title invalid call of Windows API _popen() generating The input line is too long error message invalid call of Windows API _popen() generating The input line is too long error message Aug 27, 2010
    @ssbarnea
    Copy link
    Mannequin Author

    ssbarnea mannequin commented Sep 13, 2010

    I made a small but important update to quote_command(), now it does quote the command line only under Windows because doing this under other platforms may break the command line.

    @BreamoreBoy
    Copy link
    Mannequin

    BreamoreBoy mannequin commented Jul 15, 2014

    @tim can you pick this up?

    @ezio-melotti ezio-melotti transferred this issue from another repository Apr 10, 2022
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
    Labels
    OS-windows type-bug An unexpected behavior, bug, or error
    Projects
    None yet
    Development

    No branches or pull requests

    2 participants