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

Lack of _fg option? #92

Closed
akerl opened this issue Oct 12, 2012 · 15 comments
Closed

Lack of _fg option? #92

akerl opened this issue Oct 12, 2012 · 15 comments

Comments

@akerl
Copy link
Contributor

akerl commented Oct 12, 2012

The switch from pbs to sh seems to have removed the _fg option. I've scanned the documentation and can't see a recommended solution for throwing commands to the foreground. I find this useful if I'm running an intense command and want to watch its output. What's the recommended fix for this?

For completeness, I'm specifically using _fg from pbs for the following:

  • make menuconfig on Linux kernels
  • tar extractions for those tarballs
  • wget for lurking the downloads of those tarballs
  • make for making those kernels
@amoffat
Copy link
Owner

amoffat commented Oct 12, 2012

It's on the agenda to be re-implemented. sh 1.0 had a complete rewrite of the core architecture...and unfortunately _fg hasn't yet made it back into 1.0. Your best bet for now is going to be to stick with pbs, at least for the commands that require _fg. You can use sh for everything else if you wish.

Let's leave this issue open too to remind me to add it back :)

@akerl
Copy link
Contributor Author

akerl commented Oct 12, 2012

Awesome!

@smutch
Copy link

smutch commented Nov 28, 2012

+1 for this being reimplemented. I was just wondering is there was an updated eta? I'm using pbs just now to have _fg support, but it would be nice to move to over to sh...

@donnex
Copy link

donnex commented Dec 18, 2012

The _fg feature would be great. I'm too using pbs ans sh together just for this reason.

@amoffat
Copy link
Owner

amoffat commented Dec 19, 2012

I'm pretty busy for the holidays, but if another contributor can get to it, I'll merge.

@aljungberg
Copy link

+1

@dufferzafar
Copy link

Could someone please tell me, where should I look (in the code) if I want to implement the feature myself?

@amoffat
Copy link
Owner

amoffat commented Mar 26, 2015

@dufferzafar take a good look at pexpect. use it a few times, then read the source code. once you understand the source code, it will be mostly straightforward to implement in sh

@amoffat
Copy link
Owner

amoffat commented Mar 26, 2015

do the os.spawn family of functions meet the needs of most people? i'm trying to understand the scope of _fg more. originally i was thinking _fg would work with existing options, like being able to feed input into the process via _in. if this is not necessary though, and people just want to be able to interact manually with a launched process, then the problem becomes much simpler. sh would just be an easier interface to os.spawn

@noisygecko
Copy link

While I would love to see the _fg option added for when I want to interact with the process, it would also be nice to have an option to at least print the output to the screen when running a command. It is tedious to have to use the _iter option and then print out line by line.

@amoffat
Copy link
Owner

amoffat commented Apr 9, 2015

@noisygecko are you imagining it kind of like how a bash script currently behaves? could you elaborate on it in a new issue?

@noisygecko
Copy link

I just mean something like:

for line in sh.tar('xvf', 'stuff.tgz', _iter=True):
    print line,

being handled like this:

sh.tar('xvf', 'stuff.tgz', _print=True)

@amoffat
Copy link
Owner

amoffat commented Apr 9, 2015

@noisygecko want to make a new issue for it? posting on this issue notifies everyone who has replied, and this request doesn't pertain to _fg

@lelit
Copy link

lelit commented Jun 7, 2016

Is there a workaround to the lack of _fg that would allow executing a fullscreen tool like vi? It works out-of-the-box with the release-1.2 branch _fg... any chance to see that released?

@amoffat
Copy link
Owner

amoffat commented Jun 7, 2016

@lelit Unfortunately development on the next release has stagnated a bit and I don't have a timeline. Your best bet would be to do what sh is doing under the hood for fg:

import os
vi_path = "/usr/bin/vi"
os.spawnv(os.P_WAIT, vi_path, [vi_path])

0-wiz-0 added a commit to NetBSD/pkgsrc-wip that referenced this issue Dec 12, 2016
*   added `_out` and `_out_bufsize` validator [#346](amoffat/sh#346)
*   bugfix for internal stdout thread running when it shouldn't [#346](amoffat/sh#346)

*   regression bugfix on timeout [#344](amoffat/sh#344)
*   regression bugfix on `_ok_code=None`

*   further improvements on cpu usage

*   regression in cpu usage [#339](amoffat/sh#339)

*   fd leak regression and fix for flawed fd leak detection test [#337](amoffat/sh#337)

*   support for `io.StringIO` in python2

*   added support for using raw file descriptors for `_in`, `_out`, and `_err`
*   removed `.close()`ing `_out` handler if FIFO detected

*   composed commands no longer propagate `_bg`
*   better support for using `sys.stdin` and `sys.stdout` for `_in` and `_out`
*   bugfix where `which()` would not stop searching at the first valid executable found in PATH
*   added `_long_prefix` for programs whose long arguments start with something other than `--` [#278](amoffat/sh#278)
*   added `_log_msg` for advanced configuration of log message [#311](amoffat/sh#311)
*   added `sh.contrib.sudo`
*   added `_arg_preprocess` for advanced command wrapping
*   alter callable `_in` arguments to signify completion with falsy chunk
*   bugfix where pipes passed into `_out` or `_err` were not flushed on process end [#252](amoffat/sh#252)
*   deprecated `with sh.args(**kwargs)` in favor of `sh2 = sh(**kwargs)`
*   made `sh.pushd` thread safe
*   added `.kill_group()` and `.signal_group()` methods for better process control [#237](amoffat/sh#237)
*   added `new_session` special keyword argument for controlling spawned process session [#266](amoffat/sh#266)
*   bugfix better handling for EINTR on system calls [#292](amoffat/sh#292)
*   bugfix where with-contexts were not threadsafe [#247](amoffat/sh#195)
*   `_uid` new special keyword param for specifying the user id of the process [#133](amoffat/sh#133)
*   bugfix where exceptions were swallowed by processes that weren't waited on [#309](amoffat/sh#309)
*   bugfix where processes that dupd their stdout/stderr to a long running child process would cause sh to hang [#310](amoffat/sh#310)
*   improved logging output [#323](amoffat/sh#323)
*   bugfix for python3+ where binary data was passed into a process's stdin [#325](amoffat/sh#325)
*   Introduced execution contexts which allow baking of common special keyword arguments into all commands [#269](amoffat/sh#269)
*   `Command` and `which` now can take an optional `paths` parameter which specifies the search paths [#226](amoffat/sh#226)
*   `_preexec_fn` option for executing a function after the child process forks but before it execs [#260](amoffat/sh#260)
*   `_fg` reintroduced, with limited functionality.  hurrah! [#92](amoffat/sh#92)
*   bugfix where a command would block if passed a fd for stdin that wasn't yet ready to read [#253](amoffat/sh#253)
*   `_long_sep` can now take `None` which splits the long form arguments into individual arguments [#258](amoffat/sh#258)
*   making `_piped` perform "direct" piping by default (linking fds together).  this fixes memory problems [#270](amoffat/sh#270)
*   bugfix where calling `next()` on an iterable process that has raised `StopIteration`, hangs [#273](amoffat/sh#273)
*   `sh.cd` called with no arguments no changes into the user's home directory, like native `cd` [#275](amoffat/sh#275)
*   `sh.glob` removed entirely.  the rationale is correctness over hand-holding. [#279](amoffat/sh#279)
*   added `_truncate_exc`, defaulting to `True`, which tells our exceptions to truncate output.
*   bugfix for exceptions whose messages contained unicode
*   `_done` callback no longer assumes you want your command put in the background.
*   `_done` callback is now called asynchronously in a separate thread.
*   `_done` callback is called regardless of exception, which is necessary in order to release held resources, for example a process pool
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

8 participants