anchor.diff:      return;
     }
   
  +  StreamSubscription logListener;
  +  if (commandName != _generateCommand) {
  +    logListener = Logger.root.onRecord.listen(stdIOLogListener);
  +  }
     var buildScript = await generateBuildScript();
     var scriptFile = new File(scriptLocation)..createSync(recursive: true);
     scriptFile.writeAsStringSync(buildScript);
  +  if (commandName == _generateCommand) {
  +    print(p.absolute(scriptLocation));
  +    return;
  +  }
   
     var exitPort = new ReceivePort();
     await Isolate.spawnUri(new Uri.file(p.absolute(scriptLocation)), args, null,
         onExit: exitPort.sendPort);
     await exitPort.first;
  -  await logListener.cancel();
  +  await logListener?.cancel();
   }
  +
  +const _generateCommand = 'generate-build-script';
  +
  +class _GenerateBuildScript extends Command {
  +  @override
  +  final description = 'Generate a script to run builds and print the file path '
  +      'with no other logging. Useful for wrapping builds with other tools.';
  +
  +  @override
  +  final name = _generateCommand;
  +}
  
positive.code: import 'dart:io';
  import 'dart:isolate';
  
  import 'package:logging/logging.dart';
  import 'package:path/path.dart' as p;
  
  
negative.code: import 'package:build_runner/src/logging/std_io_logging.dart';
  
  Future<Null> main(List<String> args) async {
    // Use the actual command runner to parse the args and immediately print the
    // usage information if there is no command provided or the help command was
    // explicitly invoked.
    var commandRunner = new BuildCommandRunner([])
      ..addCommand(new _GenerateBuildScript());
    var parsedArgs = commandRunner.parse(args);
    var commandName = parsedArgs.command?.name;
    if (commandName == null || commandName == 'help') {
  